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

Ajax调用GetApps后Redirect跳转失效,return View无法触发页面跳转问题

问题根本原因

你这个问题的核心是 AJAX请求默认由浏览器XMLHttpRequest对象异步处理,不会自动响应服务端的302重定向指令,也不会自动刷新/跳转页面,服务端返回的RedirectToAction本质是给请求方返回302状态码+目标地址,AJAX收到后只会默认跟进重定向拿到Apps方法返回的HTML内容,不会触发浏览器全局页面跳转,所以你看不到页面变化。

其他代码隐患

  • 参数传递逻辑冗余:你已经把序列化后的应用列表存在TempData["Applicaitons"]里了,RedirectToAction的时候完全没必要再传model参数,而且你直接把List<ApplicationViewModel>类型丢到路由参数里会被自动ToString(),传到Apps方法的时候根本没法正确绑定为ApplicationViewModel类型,虽然你现在是读TempData没用到这个参数,但属于无效写法。
  • 拼写错误:TempData的键名你写的是Applicaitons,正确拼写应该是Applications,如果后续其他地方用正确拼写读取会读不到值。
  • 异步调用阻塞:_dashboardService.GetApp看起来是异步方法,你直接用.Result调用会有线程阻塞、死锁的风险,建议改成await调用,同时把GetApps方法修改为异步public async Task<IActionResult> GetApps(string customerId)。

修复方案

你可以根据业务场景二选一:

方案1:不用AJAX,改用普通表单提交GetApps

如果不需要异步交互效果,直接用form表单提交customerId到GetApps接口,浏览器原生提交会自动处理302重定向,跳转到Apps页面加载View。

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

GetApps接口不返回RedirectToAction,直接返回Apps页面的地址给前端,前端AJAX拿到地址后手动执行页面跳转:

后端修改:

[HttpPost]
public async Task<IActionResult> GetApps(string customerId)
{
    ApplicationResponse apps = new ApplicationResponse();
    // 改成await调用异步方法
    var result = await _dashboardService.GetApp(Guid.Parse(customerId));
    apps.Applications = result.Data.Applications;
    TempData["Applications"] = JsonSerializer.Serialize(apps.Applications);
    // 直接返回跳转地址
    return Ok(Url.Action("Apps", "Home"));
}

前端AJAX回调修改:

$.ajax({
    url: '/Home/GetApps',
    type: 'POST',
    data: {customerId: '你的客户ID'},
    success: function(res) {
        // 手动跳转页面
        window.location.href = res;
    }
})

对应Apps方法简化:

public IActionResult Apps()
{
    var apps = JsonSerializer.Deserialize<List<ApplicationViewModel>>(TempData["Applications"].ToString());
    return View("/Home/Apps", apps);
}

内容的提问来源于stack exchange,提问作者burak ramazan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 02:54:05