2017-04-04 96 views
0

我有一個MVC ActionLink,它轉到名爲Register的控制器操作。MVC ActionLink轉到獲取操作控制器而不是具有相同名稱的後控制器

我有兩個Register動作,一個標有HttpGet和其他與HttpPost,但是當我嘗試發佈到這個動作它去GET Register方法而不是POST操作。

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

我的控制器看起來像這樣。

[HttpGet] 
[AllowAnonymous] 
public ActionResult Register() 
{ 
    var towns = new List<string> { "Alberton", "Bedfordview", "Benoni", "Boksburg", "Brakpan", "Edenvale", "Germiston", "Kempton Park", "Nigel", "Springs" }; 
    //var townOptions = new SelectList(towns); 
    ViewBag.Town = new SelectList(towns); //townOptions; 
    return View(); 
} 

[HttpPost] 
[AllowAnonymous] 
[ValidateAntiForgeryToken] 
public async Task<ActionResult> Register(RegisterViewModel model) 

回答

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標籤整個包住形式如下(以剃刀語法):

@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> 
} 

附: FormMethod.Post in Url.Action是無用的,它呈現在字符串中"/Home/Register?Post=Post"

相關問題