关于c#:ajax发布到控制器后返回视图

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调用成功完成后进行重定向,你可以在$.ajax方法的successdone回调事件中使用javascript来实现。

您所要做的就是将location.href属性设置为新的url。

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);
});

这假设您的服务器操作方法返回带有newUrl属性的JSON响应,该属性包含您要重定向到的URL。

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