[英]Asp.net Mvc html form is posted to wrong controller action
我有一個有 2 個動作的控制器:
public class OrganizationUnitsController : Controller
{
public ActionResult Create()
{
// return empty form
return View();
}
[HttpPost]
public ActionResult Save(OrganizationUnitViewModel unitViewModel)
{
// Save the new unit to the DB
return View();
}
}
Create.cshtml是:
@using (Html.BeginForm("Save", "OrganizationUnits", FormMethod.Post, new { @id = "form", @class = "form-horizontal" }))
{
<!-- Some inputs -->
<a href="" class="btn btn-primary">Save</a>
}
$('#form')
.on('submit',function (e) {
e.stopPropagation();
$.ajax({
url: '@Url.Action("Save", "OrganizationUnits")',
type: "POST",
dataType: "json",
contentType: "application/json; charset=utf-8",
data: JSON.stringify({
Name: $('#Name').val(),
Admin: JSON.stringify({ 'FullDescription': $('#Admin').val() }),
Members: JSON.stringify( $('#users_list_box').val() )
});
});
問題是當我單擊保存按鈕時,創建 unitViewModel 並將表單傳遞給未調用保存操作的 javascript 代碼並調用了創建操作。
將@Html.BeginForm()中的控制器操作更改為 null 並不能解決問題。
我該如何解決?
Stephen Muecke的正確<a href="" class="btn btn-primary">Save</a>
有問題,單擊它會導致GET
,嘗試將其替換為submit
輸入類型。
<input type="submit" class="btn btn-primary" value="Save" />
並使用e.preventDefault();
因為stopPropagation
阻止事件在事件鏈中冒泡,而preventDefault
阻止瀏覽器對該事件執行的默認操作。
$('#form').on('submit',function (e) {
var actionUrl = this.action;
e.stopPropagation();
e.preventDefault();
$.ajax({
url: actionUrl,
type: "POST",
dataType: "json",
contentType: "application/json; charset=utf-8",
data: JSON.stringify({
Name: $('#Name').val(),
Admin: JSON.stringify({ 'FullDescription': $('#Admin').val() }),
Members: JSON.stringify( $('#users_list_box').val() )
});
});
這可能不是你的原因,但我遇到了同樣的問題。
我的問題是控制器上有一個 [Authorize] 屬性,但調用的操作沒有 [AllowAnonymous] 屬性。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.