【问题标题】:redirect to action using jquery post使用 jquery post 重定向到操作
【发布时间】:2012-04-16 16:23:19
【问题描述】:

我正在使用 MVC3。我在做一个 jquery 帖子后试图重定向ToAction。

编辑:抱歉没有具体说明。每当它到达返回 RedirectToAction 时,它只是刷新同一个页面并返回到同一个当前视图。

我的查看代码如下:

 $("button[name='command']").click(function () {

        var checked_status = null;
        if ($("#select_all").is(':checked')) {
            checked_status = true;
        } else {
            checked_status = false;
        }

        $.post('@Url.Action("SaveInvitations", "Contractors")',
              {
                  command: $(this).val(),
                  selectedContractors: $("input[name='selectedContractors']:checked").map(function () { return $(this).val(); }).get().join(","),
                  page: $(".selected").text(),
                  CheckedAll: checked_status
              });
    });

我的控制器具有以下功能:

        if (command == "skip")
        {
            TempData["message"] = string.Format("No contractors where selected");
            RedirectToAction("Index", "Home");
        }
        else
        {
...
TempData["message"] = string.Format("The invitations have been send successfully.");
                Session["subModel"] = null;
                return RedirectToAction("Index", "Home");
}

然后,我只是想在 jquery $.post 之后执行 redirectToAction。我必须做些什么才能让它发挥作用?

【问题讨论】:

  • 你能比“不起作用”更具体吗?会发生什么,这与您的预期有何不同?您收到任何错误消息吗?

标签: jquery asp.net-mvc-3 post redirect razor


【解决方案1】:

RedirectToAction 是一种服务器端方法。由于您正在编写 jQuery 帖子,因此您可能需要在帖子完成后执行此操作。

 $.post('@Url.Action("SaveInvitations", "Contractors")',
              {
                  command: $(this).val(),
                  selectedContractors: $("input[name='selectedContractors']:checked").map(function () { return $(this).val(); }).get().join(","),
                  page: $(".selected").text(),
                  CheckedAll: checked_status
              },function(){
  window.location.href='@Url.Action("Index", "Home")';
});

这是编写上述方法的另一种方法,使用对done 的显式调用使其更具可读性。

 var url='@Url.Action("SaveInvitations", "Contractors")';
 var data =  {
                  command: $(this).val(),
                  selectedContractors: $("input[name='selectedContractors']:checked")
                          .map(function () { return $(this).val(); }).get().join(","),
                  page: $(".selected").text(),
                  CheckedAll: checked_status
             };
 $.post(url,data)
  .done(function(){
        window.location.href='@Url.Action("Index", "Home")';
   });

如果你在 jQuery ajax 操作之后进行重定向,为什么不直接调用 Action 方法(普通表单发布)然后从那里进行重定向?人们通常使用 jQuery ajax 操作来进行部分页面更新。你确定要这样做吗?

【讨论】:

  • 是的,我知道做一个正常的发布会更容易,但我不知道如何捕捉我在动作中发送的参数,所以如果我在 js 中捕捉它们会容易得多然后做一个帖子,或者至少,它现在对我来说更快。一旦我知道如何在动作中捕捉它们,我可以稍后进行重构。
  • 使用强类型视图并将其发布到您的操作中。这比这种方法要好得多。如果有人使用禁用 javascript 的浏览器访问您的网站怎么办?
  • 嗯,起初我遇到了一些问题,因为页面非常复杂,但我会进行重构并尝试在视图模型对象中捕获它们。
猜你喜欢
  • 1970-01-01
  • 2016-07-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-20
  • 2014-12-31
  • 1970-01-01
相关资源
最近更新 更多