【问题标题】:post action for url.action?url.action 的发布操作?
【发布时间】:2010-02-09 16:37:08
【问题描述】:

这是我的 Controller 类中的一行代码:

return JavaScript(String.Format("window.top.location.href='{0}';", Url.Action("MyAction", "MyController")))

有没有办法让它使用verb=postMyAction 版本?

【问题讨论】:

    标签: asp.net-mvc


    【解决方案1】:

    您不能通过简单地导航到不同的 URL 来使用 POST。 (这就是您通过更改 location.href 所做的。)

    只有在提交一些数据时使用 POST 才有意义。从您的代码中不清楚实际会发布哪些数据。

    如果您真的想通过 javascript 发起 POST,请尝试使用它来提交表单。

    【讨论】:

      【解决方案2】:

      我自己也遇到了同样的问题,并使用 data- 属性和一些 jQuery 解决了它。这样做的好处是,当您将鼠标悬停在链接上时,您仍然可以获得正确的 URL,即使它执行 POST。请注意,Html.BeginForm 包含用户按回车键时的默认操作。

      HTML(ASP.NET MVC3 Razor)

      @using (Html.BeginForm("Quick", "Search"))
      {
          <input type="text" name="SearchText" />
          <a href="@Url.Action("Quick", "Search")" data-form-method="post">Search</a>
          <a href="@Url.Action("Advanced", "Search")" data-form-method="post">Advanced</a>
      }
      

      jQuery

      $("a[data-form-method='post']").click(function (event) {
          event.preventDefault();
          var element = $(this);
          var action = element.attr("href");
          element.closest("form").each(function () {
              var form = $(this);
              form.attr("action", action);
              form.submit();
          });
      });
      

      【讨论】:

      • 爱它。谢谢!
      【解决方案3】:

      继续 Matt Lacey 的回答,您的操作可能会返回一些执行此操作的 Javascript:

      1. 使用 jquery 向 DOM 添加新表单
      2. 使用jquery提交新添加的表单

      类似这样的:(未经测试的代码)

      var urlHelper = new UrlHelper(...);
      var redirectUrl = urlHelper.Action("MyAction", "MyController");
      
      var redirectScript = String.Format(@"
          var formTag = $('<form action=""{0}"" method=""post"" id=""redirectForm""></form>');
          $(body).append(formTag);
          formTag.submit();"
          , redirectUrl
      );
      
      return JavaScript(redirectScript);
      

      【讨论】:

        猜你喜欢
        • 2013-08-04
        • 1970-01-01
        • 2016-04-05
        • 1970-01-01
        • 1970-01-01
        • 2016-11-30
        • 1970-01-01
        • 2013-10-14
        • 2020-12-21
        相关资源
        最近更新 更多