View跳转失效:Ajax请求后无法跳转到目标视图
问题原因及解决办法
核心原因
你用Ajax发起POST请求的方式本身就不会触发页面跳转。Ajax是异步HTTP请求,它的设计目的是在不刷新整个页面的前提下和服务器交互,服务器返回的View内容会作为响应数据传递给Ajax的回调函数,而不是让浏览器自动加载并渲染成新页面。所以即便控制器成功执行并返回了View,浏览器也只会停留在当前的View 1。
解决办法
根据你的需求,有两种常见处理方式:
1. 放弃Ajax,改用普通表单提交(最直接的方案)
把每行的按钮改成表单提交按钮,将该行的QueuePatient数据作为表单隐藏域或表单控件提交:
<!-- View 1中每行的表单示例 --> <form method="POST" action="/YourControllerName/BillingHome"> <!-- 隐藏域存储该行的QueuePatient数据 --> <input type="hidden" name="PatientId" value="@item.PatientId" /> <input type="hidden" name="Name" value="@item.Name" /> <!-- 其他字段... --> <button type="submit">跳转至账单页</button> </form>
这种方式下,表单提交后浏览器会发起页面级请求,服务器返回的View 2会被自动渲染成新页面,自然实现跳转并填充数据。
2. 保留Ajax,在回调中手动触发跳转
如果必须用Ajax(比如需要先做前端验证),可以修改控制器和前端代码:
- 控制器修改:返回重定向URL的JSON结果
public IActionResult BillingHome(QueuePatient queuePatient) { // 处理数据,构建billingHomeViewModel // 生成View 2的URL并返回JSON var redirectUrl = Url.Action("BillingHome", new { /* 传递billingHomeViewModel的参数 */ }); return Json(new { redirectUrl = redirectUrl }); }
- 前端Ajax回调处理:
$.ajax({ type: "POST", url: "/YourControllerName/BillingHome", data: /* 组装QueuePatient的JSON数据 */, success: function(response) { // 跳转到返回的URL window.location.href = response.redirectUrl; } });
内容的提问来源于stack exchange,提问作者Dnyati
相关产品推荐
相关产品推荐

