MVC Button没有触发ActionResult

时间:2017-12-29 21:33:22

标签: c# jquery asp.net-mvc model-view-controller

最近我开始研究MVC应用程序,到目前为止,我一直坚持这一点。

我有这个.cshtml代码:

@model Vidly.ViewModels.NewCustomerViewModel
@{
    ViewBag.Title = "NewCustomer";
    Layout = "~/Views/Shared/_Layout.cshtml";
}

<h2>New Customer</h2>

@using (Html.BeginForm("Save", "Customers",FormMethod.Post,null))
{

    <form class="form-group">
        @Html.LabelFor(m => m.Customer.Name)
        @Html.TextBoxFor(m => m.Customer.Name, new { @class = "form-control" })
    </form>
    <form class="form-group">
        @Html.LabelFor(m => m.Customer.Birthdate)
        @Html.TextBoxFor(m => m.Customer.Birthdate, new { @class = "form-control" })
    </form>
    <form class="checkbox">
        <label>
            @Html.CheckBoxFor(m => m.Customer.IsSubscribedToNewsletter, new { @class = "form-control" }) Subscribed to Newsletter
        </label>
    </form>
    <form class="form-group">
        @Html.LabelFor(m => m.Customer.MembershipTypeId)
        @Html.DropDownListFor(m => m.Customer.MembershipType, new SelectList(Model.MembershipTypes, "Id", "Name"), "Select Membership Type", new { @class = "form-control" })
    </form>
    @Html.HiddenFor(m => m.Customer.Id)
    <button type="submit" class="btn btn-primary">Save</button>   
}

在CustomersControler.cs文件中引用此操作:

 [HttpPost]
        public ActionResult Save(Customer customer)
        {
            if (customer.Id == 0)
                _context.Customers.Add(customer);
            else
            {
                var customerInDb = _context.Customers.Single(c => c.Id == customer.Id);
                customerInDb.Name = customer.Name;
                customerInDb.Birthdate = customer.Birthdate;
                customerInDb.MembershipTypeId = customer.MembershipTypeId;
                customerInDb.IsSubscribedToNewsletter = customer.IsSubscribedToNewsletter;


            }

            _context.SaveChanges();
            return RedirectToAction("Customers", "Index");
        }
    }

问题在于,当我尝试单击“保存”按钮时,它根本不会触发Save ActionResult。 我已经尝试在调试模式下启动并在代码上设置断点,但它实际上没有触发该方法。 我已经读到它与在ActionResult之前触发的JQuery事件有关,但我不知道如何阻止它(如果JQuery真的有关于此的事情)

有什么想法吗?拜托,我真的坚持了这个!

1 个答案:

答案 0 :(得分:3)

视图中的模型为NewCustomerViewModel,因此您绑定的模型必须相同(或者您需要使用Prefix的{​​{1}}属性。)

将方法的签名更改为

BindAttribute

此外,您需要删除所有public ActionResult Save(NewCustomersViewModel model) 元素(<form>生成的元素除外),因为嵌套表单是无效的html。

但是,您的代码表明您的视图模型包含BeginForm数据模型的属性,这是不好的做法。视图模型应仅包含视图中所需的数据模型的属性。然后,将视图模型的属性映射到数据模型。