MVC ActionLink转到获取操作控制器而不是具有相同名称的后控制器

时间:2017-04-04 12:41:10

标签: c# jquery asp.net-mvc

我有一个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();
            });
    }

1 个答案:

答案 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"中呈现