以下是我的Controller类中的一行代码:
return JavaScript(String.Format("window.top.location.href='{0}';", Url.Action("MyAction", "MyController")))
有没有办法让它使用verb=post
版本的MyAction
?
答案 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来做到这一点:
这样的事情:(未经测试的代码)
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);