Asp.net Mvc html表单被发布到错误的控制器操作

时间:2018-04-10 06:42:28

标签: c# html asp.net-mvc

我有一个带有2个动作的控制器:

date = anydate (2017-11-03)
time = currenttime (Time.now)
Time.zone = current_user.time_zone
Required = date +  time (to current_user.timezone)

Create.cshtml 是:

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

问题是当我单击保存按钮时,生成unitViewModel并将表单传递给保存操作的javascript代码未被调用,并且调用了 Create 操作。

@ Html.BeginForm()中的控制器操作更改为null并不能解决问题。

我该如何解决?

1 个答案:

答案 0 :(得分:1)

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