ajax发布到控制器

时间:2017-11-10 21:17:28

标签: c# .net ajax asp.net-mvc

我正在发送一些带有ajax的json数据

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

到我的控制器

 [HttpPost]
        public ActionResult Summary(List<string> flagsChecked)
        {

             [...]

                return View(flags);
        }

并尝试使用我已经处理的数据返回一个视图,但我想这不会发生,因为ajax是关于异步http请求的。如何将代码更改为同步?

2 个答案:

答案 0 :(得分:2)

使用ajax背后的整个想法是为用户提供部分页面更新体验。如果您正在进行ajax调用,并且一旦完成并且您正在重定向到另一个页面,则它不会向用户提供部分页面更新体验。它看起来与普通表单提交非常相似(整页提交)。

如果您必须通过ajax将数据发送到服务器,但想在ajax调用成功完成后进行重定向,则可以使用successdone回调中的javascript来执行此操作$.ajax方法上的事件。

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

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。

[HttpPost]
public ActionResult Summary(List<string> flagsChecked)
{
    return Json(new { newUrl = Url.Action("Index","Home") });
}

答案 1 :(得分:1)

执行此操作的一种方法是通过ajax将请求发送到控制器,然后在页面上呈现部分视图。最简单的方法是使用built in ajax helpers in ASP MVC。这是另一篇文章的链接,提供了很好的概述:

How to render partial view in MVC5 via ajax call to a controller and return HTML