簡體   English   中英

"Asp.net Mvc html 表單發布到錯誤的控制器操作"

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM