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

MVC中如何通过JsonResult实现保存后重定向至Action?

解决AJAX请求后通过JSON实现重定向的问题

你遇到的核心问题是:后端使用JsonResult返回数据时,没法直接像RedirectToAction那样触发页面跳转——这是因为AJAX是异步请求,后端的重定向响应无法直接作用于当前页面,必须由前端逻辑来触发跳转。下面是完整的修正方案:

1. 前端AJAX代码优化

$.ajax({
    url: '/SA/Save',
    type: "POST",
    data: JSON.stringify(data),
    dataType: "JSON",
    contentType: "application/json",
    success: function (response) {
        if (response.status) {
            alert('Successfully done.');
            // 从后端返回的JSON中获取跳转URL,执行页面跳转
            window.location.href = response.Url;
            // 清空表单数据
            t = [];
            d = [];
            r = [];
            $('#SN').val('');
            $('#SA').val('');
            $('#t').empty();
            $('#d').empty();
            $('#r').empty();
        } else {
            alert('Failed to save data.');
        }
        $('#submit').val('Save');
    },
    // 增加请求失败的处理逻辑,避免用户无感知等待
    error: function(xhr, status, error) {
        alert('Request failed: ' + error);
        $('#submit').val('Save');
    }
});

2. 后端控制器代码修正

public JsonResult Save(SAVM O) 
{
    bool isSuccess = false;
    string redirectUrl = string.Empty;
    var userId = User.Identity.GetUserId();

    if (ModelState.IsValid) 
    {
        // 把视图模型映射到数据库实体(根据你的实际业务填充属性)
        SA saEntity = new SA 
        {
            UserId = userId,
            // 示例:从视图模型O中取值填充实体
            // SN = O.SN,
            // SAValue = O.SA
        };
        _db.SA.Add(saEntity);
        _db.SaveChanges();
        isSuccess = true;
        // 使用Url.Action生成符合路由规则的URL,避免硬编码路径
        redirectUrl = Url.Action("F", "SA");
    } 
    else 
    {
        isSuccess = false;
        // 验证失败时可选择返回空URL,或指定跳转回表单页
        // redirectUrl = "/SA/Create";
    }

    // 返回包含状态和跳转URL的JSON数据
    return Json(new { status = isSuccess, Url = redirectUrl });
}

关键注意点

  • 不要硬编码URL:用Url.Action("ActionName", "ControllerName")生成路由URL,适配项目的路由配置,避免路径错误。
  • AJAX异步特性:后端无法直接重定向AJAX请求,必须由前端在成功回调中通过window.location.href主动触发页面跳转。
  • 语法修正:你的原始控制器代码存在语法错误(比如缺少分号、多余的参数逗号、else块格式问题),上面的代码已全部修复。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:10:46