我有一个MVC ActionLink,它转到名为Register
的控制器操作。
我有两个Register
个操作,一个用HttpGet
标记,另一个用HttpPost
标记,但是当我尝试发布此操作时,它会转到GET {{1方法而不是POST操作。
Register
这是脚本
<div class="form-group">
<div class="col-md-offset-2 col-md-10">
@Html.ActionLink("Register", "Register", "Home", new { @class = "btn btn-default" }, new { onclick = "RegisterLoader()" })
</div>
</div>
我的控制器看起来像这样。
function RegisterLoader() {
var url = '@Url.Action("Register", "Home", new { FormMethod.Post })';
$("#divLoading").show();
$.post(url, null,
function (data) {
$("#PID")[0].innerHTML = data;
$("#divLoading").hide();
});
}
答案 0 :(得分:2)
js中的问题,它首先处理onclick
事件,创建ajax POST请求,然后将页面位置更改为地址,在href
使用GET请求定义。
要防止重定位,您应该从js方法返回false
:
function RegisterLoader() {
var url = '@Url.Action("Register", "Home",new { FormMethod.Post})';
$("#divLoading").show();
$.post(url, null,
function (data) {
$("#PID")[0].innerHTML = data;
$("#divLoading").hide();
});
return false;
}
它会阻止调用href
。
但是,如果要执行同步POST请求,则应将ActionLink
更改为<input type="submit" />
并使用form
标记将整个表单包装如下(使用razor语法):
@using(Html.BeginForm("Register", "Home", FormMethod.Post))
{
@*another form tags*@
<div class="form-group">
<div class="col-md-offset-2 col-md-10">
<input type="submit" value="Register" />
</div>
</div>
}
P.S。 FormMethod.Post
中的Url.Action
无用,它会在字符串"/Home/Register?Post=Post"
中呈现