为 url.action 发布操作?

post action for url.action?

提问人:Rod 提问时间:2/10/2010 最后编辑:Phate01Rod 更新时间:4/13/2015 访问量:83166

问:

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

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

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

ASP.NET-MVC 格式

评论


答:

20赞 Matt Lacey 2/10/2010 #1

您不能通过简单地导航到其他 URL 来使用 POST。(这是通过更改 location.href 来执行的操作。

只有在提交某些数据时才有意义。从您的代码中不清楚哪些数据实际上将被 POST 处理。

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

3赞 Seth Petry-Johnson 2/10/2010 #2

继续 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);
20赞 Oundless 6/7/2011 #3

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

HTML (ASP.NET MVC3 剃刀)

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