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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 07:05:17