Return view after ajax post to controller
我通过post发送一些带有ajax的json数据
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | function SendF() { $.ajax({ url: '@Url.Action("Summary")', type: 'POST', data: JSON.stringify(flags), contentType:"application/json;charset=utf-8", success: function() { }, error: function() { alert("Oops! We've experienced a connection problem!"); } }); } |
到我的控制器
1 2 3 4 5 6 7 8 | [HttpPost] public ActionResult Summary(List<string> flagsChecked) { [...] return View(flags); } |
并尝试使用我已处理的数据返回一个视图,但我想这不会发生,因为ajax是关于异步http请求的。 如何将代码更改为同步?
使用ajax背后的整个想法是为用户提供部分页面更新体验。如果您正在进行ajax调用,并且一旦完成并且您正在重定向到另一个页面,则它不会向用户提供部分页面更新体验。它看起来非常类似于普通表单提交(整页提交)。
如果你必须通过ajax将数据发送到服务器,但想在ajax调用成功完成后进行重定向,你可以在
您所要做的就是将
1 2 3 4 5 6 7 8 9 10 11 12 | var flags = ["aa","bb","cc"]; $.ajax({ url: '@Url.Action("Summary")', type: 'POST', data: JSON.stringify(flags), contentType:"application/json;charset=utf-8" }).done(function(res) { window.location.href = res.newUrl; }).fail(function(xhr, a, error) { console.log(error); }); |
这假设您的服务器操作方法返回带有
1 2 3 4 5 | [HttpPost] public ActionResult Summary(List<string> flagsChecked) { return Json(new { newUrl = Url.Action("Index","Home") }); } |
一种方法是通过ajax将请求发送到控制器,然后在页面上呈现部分视图。最简单的方法是在ASP MVC中使用内置的ajax助手。以下是另一篇文章的链接,该文章提供了非常好的概述:
如何通过ajax调用在控制器中呈现MVC5中的局部视图并返回HTML