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,改用普通表单提交:
- 修改表单代码,直接指定提交地址和方式:
<form id="approvalForm" action="@Url.Action("ApprovalIndex", "Resignation")" method="post"> <!-- 你的表单控件(比如审批意见、请求ID等) --> <button type="submit" class="btn">审批</button> </form>
- 调整控制器的
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触发页面跳转
- 修改控制器
ApprovalIndex方法,返回包含跳转地址的JSON:
public ActionResult ApprovalIndex(YourApprovalModel model) { // 执行审批逻辑 // ... // 返回跳转URL return Json(new { redirectUrl = Url.Action("PendingManagersRequests") }); }
- 修改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替换当前页面内容
如果希望不刷新整个页面,直接替换内容:
- 控制器保持
return View(vmr)的逻辑:
public ActionResult ApprovalIndex(YourApprovalModel model) { // 执行审批逻辑 // ... // 获取待审批数据并返回视图 var vmr = // 获取数据 return View("PendingManagersRequests", vmr); }
- 修改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
相关产品推荐
相关产品推荐

