【问题标题】:Return view after ajax post to controllerajax 发布到控制器后返回视图
【发布时间】:2017-11-10 21:17:28
【问题描述】:

我正在用 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 请求的。如何将我的代码更改为同步?

【问题讨论】:

  • 进行 ajax 调用然后使用 window.location.href 是没有意义的。您的方法需要返回部分视图,然后在回调中更新 DOM 的某些部分,例如success: function(data) { $(someElement).html(data); }
  • 我已经意识到但粘贴了旧代码。对不起。无论如何,我更喜欢将其更改为不异步,因此我不必像您描述的那样为此更改整个视图
  • 对不起,您的最后评论毫无意义——它与异步或同步无关
  • 你能详细说明“但我想这不会发生”的意思吗???
  • 嗯...我的意思是在处理数据后只是简单地从控制器重定向到视图。所以我应该将第一个 ajax post call 切换为一个简单的 post call(但不知道是哪个,以及如何)?

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


【解决方案1】:

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

如果您绝对必须通过 ajax 将数据发送到服务器,但希望在 ajax 调用成功完成后进行重定向,您可以在 successdone 回调事件中使用 JavaScript 来完成 @ 987654323@方法。

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

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

【讨论】:

  • 我认为这是一个有效的解决方案,但这不是我的意思。我需要创建另一个问题,以免再搞砸了。
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 2018-10-17
    • 2022-08-03
    • 1970-01-01
    • 2019-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-18
    相关资源
    最近更新 更多