ASP.NET MVC中HttpPost调用RedirectToAction不跳转问题求助
ASP.NET MVC POST后RedirectToAction不跳转的解决方法
问题根源
你遇到的情况核心原因是POST请求通过AJAX异步提交,浏览器对AJAX返回的302响应不会自动触发页面跳转,而是会把跳转目标的HTML内容作为响应返回给AJAX回调,因此页面停留在当前视图,但网络请求中能看到302状态码和目标页面的HTML。
解决方案
方案1:改用普通表单提交(推荐,最简单)
确保视图使用普通HTML表单提交,而非AJAX:
@using (Html.BeginForm("Test", "Test", FormMethod.Post)) { <!-- 你的表单控件,比如输入框等 --> <input type="text" name="test" /> <input type="submit" value="提交" /> }
这种方式下,浏览器会正常处理302响应,自动跳转到Success/SuccessPage页面。
方案2:如果必须用AJAX提交,前端手动处理跳转
如果业务需求必须保留AJAX提交,修改后端返回跳转URL,由前端JS执行跳转:
后端代码修改
[HttpPost] public async Task<ActionResult> Test(string test) { using (Stream iStream = Request.InputStream) using (StreamReader reader = new StreamReader(iStream, Encoding.UTF8)) { string requestData = await reader.ReadToEndAsync(); Service1Client o = new Service1Client(); bool result = o.Test(requestData); if (result) { // 返回跳转URL的JSON数据 return Json(new { redirectUrl = Url.Action("SuccessPage", "Success") }); } else { // 失败时返回错误提示 return Json(new { error = "操作失败" }); } } }
前端AJAX处理
// 以jQuery AJAX为例 $.ajax({ url: '/Test/Test', type: 'POST', data: { test: '你的数据内容' }, success: function(response) { if (response.redirectUrl) { // 执行页面跳转 window.location.href = response.redirectUrl; } else if (response.error) { // 处理错误情况 alert(response.error); } } });
额外注意点
- 避免手动读取
Request.InputStream后依赖模型绑定:如果string test参数需要从表单获取,手动读取流会导致模型绑定无法获取参数值(流只能读取一次)。若无需读取整个请求体,建议移除流读取代码,直接使用默认模型绑定。
内容的提问来源于stack exchange,提问作者Jessica
相关产品推荐
相关产品推荐

