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

ASP.NET MVC中Ajax调用后RedirectToAction未跳转问题排查

问题分析与解决

核心原因

  1. AJAX请求的特性限制:你用AJAX异步提交表单,服务器返回的重定向(RedirectToAction)不会触发浏览器自动跳转。AJAX会把服务器的响应(包括重定向的状态码和目标URL)直接返回给JS的回调函数,而不是让浏览器加载新页面。
  2. 控制器与前端的响应不匹配:
    • 最初没写return RedirectToAction,导致代码路径没有返回值,编译报错。
    • 加上return后,控制器返回的是RedirectResult(不是JSON),前端AJAX的success回调接收到的响应里没有success字段,response.success会是undefined,所以!response.success为true,触发alert("here1")。

解决方案

方案1:放弃AJAX,直接表单提交

如果不需要异步提交的需求,删掉JS里的AJAX代码,去掉return false,让表单正常提交。这样控制器的RedirectToAction就能直接触发浏览器跳转。

方案2:保留AJAX,手动处理跳转

修改控制器返回JSON数据,包含跳转URL,然后在前端JS里手动触发页面跳转:

控制器修改后代码:

[HttpPost]
public ActionResult UpdateStatus(string ID)
{
    try
    {
        // Do_Something_Here;

        // 返回包含成功状态和跳转URL的JSON
        return Json(new 
        { 
            success = true, 
            redirectUrl = Url.Action("List", "Workflow", new { Id = "U" + ID }) 
        });
    }
    catch (Exception ex)
    {
        return Json(new
        {
            success = false,
            message = ex.Message,
        });
    }
}

前端JS修改后代码:

document.getElementById('newform').onsubmit = function ()
{
    var model = new FormData();
    model.append("ID", '@Model.ID');

    $.ajax({
        url: "/Workflow/UpdateStatus",
        type: "POST",
        data: model,
        contentType: false,
        processData: false,
        success: function (response) {
            if(!response.success)
            {
                alert("here1");
            }
            else
            {
                // 手动跳转到目标页面
                window.location.href = response.redirectUrl;
            }
        },
        error: function (xhr, error, thrown) {
            alert("here2" + xhr.responseText);
        }
    });

    return false;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 16:35:14