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
相关产品推荐
相关产品推荐

