为url.action发布帖子?

时间:2010-02-09 16:37:09

标签: asp.net-mvc

以下是我的Controller类中的一行代码:

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

有没有办法让它使用verb=post版本的MyAction

3 个答案:

答案 0 :(得分:19)

我自己遇到了同样的问题,并使用data-属性和一些jQuery解决了它。这样做的好处是,当您将鼠标悬停在链接上时,即使它执行POST,您仍然可以获得正确的URL。请注意,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();
    });
});

答案 1 :(得分:15)

您只需导航到其他网址即可使用POST。 (这是您通过更改location.href所做的事情。)

使用POST仅在提交某些数据时才有意义。从您的代码中不清楚实际发布的数据是什么。

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

答案 2 :(得分:2)

继续关闭Matt Lacey的回答,你的行动可能会返回一些Javascript来做到这一点:

  1. 使用jquery向DOM添加新表单
  2. 使用jquery提交新添加的表单
  3. 这样的事情:(未经测试的代码)

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