You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ASP.NET MVC中HttpPost调用RedirectToAction不跳转问题求助

ASP.NET MVC POST后RedirectToAction不跳转的解决方法

问题根源

你遇到的情况核心原因是POST请求通过AJAX异步提交,浏览器对AJAX返回的302响应不会自动触发页面跳转,而是会把跳转目标的HTML内容作为响应返回给AJAX回调,因此页面停留在当前视图,但网络请求中能看到302状态码和目标页面的HTML。

解决方案

方案1:改用普通表单提交(推荐,最简单)

确保视图使用普通HTML表单提交,而非AJAX:

@using (Html.BeginForm("Test", "Test", FormMethod.Post))
{
    <!-- 你的表单控件,比如输入框等 -->
    <input type="text" name="test" />
    <input type="submit" value="提交" />
}

这种方式下,浏览器会正常处理302响应,自动跳转到Success/SuccessPage页面。

方案2:如果必须用AJAX提交,前端手动处理跳转

如果业务需求必须保留AJAX提交,修改后端返回跳转URL,由前端JS执行跳转:

后端代码修改

[HttpPost]
public async Task<ActionResult> Test(string test)
{
    using (Stream iStream = Request.InputStream)
    using (StreamReader reader = new StreamReader(iStream, Encoding.UTF8))
    {
        string requestData = await reader.ReadToEndAsync();
        Service1Client o = new Service1Client();
        bool result = o.Test(requestData);

        if (result)
        {
            // 返回跳转URL的JSON数据
            return Json(new { redirectUrl = Url.Action("SuccessPage", "Success") });
        }
        else
        {
            // 失败时返回错误提示
            return Json(new { error = "操作失败" });
        }
    }
}

前端AJAX处理

// 以jQuery AJAX为例
$.ajax({
    url: '/Test/Test',
    type: 'POST',
    data: { test: '你的数据内容' },
    success: function(response) {
        if (response.redirectUrl) {
            // 执行页面跳转
            window.location.href = response.redirectUrl;
        } else if (response.error) {
            // 处理错误情况
            alert(response.error);
        }
    }
});

额外注意点

  • 避免手动读取Request.InputStream后依赖模型绑定:如果string test参数需要从表单获取,手动读取流会导致模型绑定无法获取参数值(流只能读取一次)。若无需读取整个请求体,建议移除流读取代码,直接使用默认模型绑定。

内容的提问来源于stack exchange,提问作者Jessica

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 06:55:26