【发布时间】:2010-02-09 16:37:08
【问题描述】:
这是我的 Controller 类中的一行代码:
return JavaScript(String.Format("window.top.location.href='{0}';", Url.Action("MyAction", "MyController")))
有没有办法让它使用verb=post 的MyAction 版本?
【问题讨论】:
标签: asp.net-mvc
这是我的 Controller 类中的一行代码:
return JavaScript(String.Format("window.top.location.href='{0}';", Url.Action("MyAction", "MyController")))
有没有办法让它使用verb=post 的MyAction 版本?
【问题讨论】:
标签: asp.net-mvc
您不能通过简单地导航到不同的 URL 来使用 POST。 (这就是您通过更改 location.href 所做的。)
只有在提交一些数据时使用 POST 才有意义。从您的代码中不清楚实际会发布哪些数据。
如果您真的想通过 javascript 发起 POST,请尝试使用它来提交表单。
【讨论】:
我自己也遇到了同样的问题,并使用 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();
});
});
【讨论】:
继续 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);
【讨论】: