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

ASP.NET MVC:ApprovalIndex无法重定向至PendingManagersRequests视图(无报错)

ASP.NET MVC 提交后页面不跳转且弹出localhost错误的解决办法

问题根源

你遇到的问题核心在于AJAX请求的特性:AJAX是异步获取数据的请求,默认不会自动触发页面跳转。当控制器执行return View(vmr)时,只是把PendingManagersRequests视图的HTML代码返回给了AJAX的回调函数,但你没有对这个返回内容做任何处理,所以页面不会有变化。另外,如果AJAX请求配置了dataType: 'json',但控制器返回的是HTML,就会因为解析失败触发error回调,弹出localhost相关的错误弹窗。

解决方案

根据你的需求,分两种场景处理:

场景1:不需要异步提交(最简单的解决方式)

如果审批操作不需要前端异步反馈,直接弃用AJAX,改用普通表单提交:

  1. 修改表单代码,直接指定提交地址和方式:
<form id="approvalForm" action="@Url.Action("ApprovalIndex", "Resignation")" method="post">
    <!-- 你的表单控件(比如审批意见、请求ID等) -->
    <button type="submit" class="btn">审批</button>
</form>
  1. 调整控制器的ApprovalIndex方法,使用RedirectToAction触发页面跳转:
public ActionResult ApprovalIndex(YourApprovalModel model)
{
    // 执行审批逻辑(比如更新数据库状态)
    // ...

    // 跳转到PendingManagersRequests视图
    return RedirectToAction("PendingManagersRequests");
}

public ActionResult PendingManagersRequests()
{
    var vmr = // 从数据库或业务层获取待审批请求数据
    return View(vmr);
}

这种方式下,表单提交后会触发浏览器的页面跳转,完全符合你预期的效果。

场景2:必须使用AJAX提交(比如需要前端验证或异步反馈)

如果必须保留AJAX,需要调整AJAX的配置和控制器逻辑,手动处理跳转或页面内容替换:

方式A:控制器返回跳转URL,AJAX触发页面跳转

  1. 修改控制器ApprovalIndex方法,返回包含跳转地址的JSON:
public ActionResult ApprovalIndex(YourApprovalModel model)
{
    // 执行审批逻辑
    // ...

    // 返回跳转URL
    return Json(new { redirectUrl = Url.Action("PendingManagersRequests") });
}
  1. 修改AJAX代码,在success回调中跳转到目标页面:
$("#approvalBtn").click(function() {
    $.ajax({
        url: "/Resignation/ApprovalIndex",
        type: "POST",
        data: $("#approvalForm").serialize(),
        dataType: "json",
        success: function(result) {
            // 跳转到PendingManagersRequests页面
            window.location.href = result.redirectUrl;
        },
        error: function(xhr) {
            // 替换alert为控制台输出,方便排查错误
            console.error("提交失败:", xhr.responseText);
        }
    });
});

方式B:控制器返回视图HTML,AJAX替换当前页面内容

如果希望不刷新整个页面,直接替换内容:

  1. 控制器保持return View(vmr)的逻辑:
public ActionResult ApprovalIndex(YourApprovalModel model)
{
    // 执行审批逻辑
    // ...

    // 获取待审批数据并返回视图
    var vmr = // 获取数据
    return View("PendingManagersRequests", vmr);
}
  1. 修改AJAX代码,指定dataType: "html"并替换页面内容:
$("#approvalBtn").click(function() {
    $.ajax({
        url: "/Resignation/ApprovalIndex",
        type: "POST",
        data: $("#approvalForm").serialize(),
        dataType: "html",
        success: function(htmlContent) {
            // 替换页面主体内容(根据你的布局调整选择器)
            $("#mainContent").html(htmlContent);
        },
        error: function(xhr) {
            console.error("提交失败:", xhr.responseText);
        }
    });
});

常见错误排查点

  • 检查AJAX的dataType是否和控制器返回的内容类型匹配:如果返回HTML就设为html,返回JSON就设为json,不匹配会直接触发error回调。
  • 如果控制器用RedirectToAction,AJAX会收到302状态码,但默认不会自动跳转,必须在success回调中手动处理window.location。
  • 确保表单数据正确序列化,没有遗漏必填字段,否则控制器可能无法正确接收参数导致逻辑异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 12:55:22