Asp.net mvc 3 mvc3在同一视图上编辑表单数据的模型绑定
我是MVC3新手,读了两天书后,我找不到我做错了什么。 以下是场景: 我有一个强类型视图:Asp.net mvc 3 mvc3在同一视图上编辑表单数据的模型绑定,asp.net-mvc-3,model-binding,Asp.net Mvc 3,Model Binding,我是MVC3新手,读了两天书后,我找不到我做错了什么。 以下是场景: 我有一个强类型视图: <%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/NestedMasterPage.Master" Inherits="System.Web.Mvc.ViewPage<AdminToolMVC.Models.PageModels.MembershipVM>" %> <% using (Ht
<%@ Page Title="" Language="C#"
MasterPageFile="~/Views/Shared/NestedMasterPage.Master"
Inherits="System.Web.Mvc.ViewPage<AdminToolMVC.Models.PageModels.MembershipVM>" %>
<% using (Html.BeginForm("UpdateUser", "Admin"))
{ %>
<%: Html.CheckBoxFor(m => m.Tab6VM.Programs[0].Selected,
new { id = "prog1" })%>
<%: Model.Tab6VM.Programs[0].Description %></br>
<%: Html.CheckBoxFor(m => m.Tab6VM.Programs[1].Selected,
new { id = "prog2" })%>
<%: Model.Tab6VM.Programs[1].Description %></br>
<%: Html.CheckBoxFor(m => m.Tab6VM.Programs[2].Selected,
new { id = "prog3" })%>
<%: Model.Tab6VM.Programs[2].Description %></br>
<%: Html.CheckBoxFor(m => m.Tab6VM.Programs[3].Selected,
new { id = "prog4" })%>
<%: Model.Tab6VM.Programs[3].Description %></br>
<input type="submit" id="btnUpdate" value="Update" />
<%} %>
我的印象是,我的强类型视图页面应该将用户在表单中更改的数据发送到AdminController类中的UpdateUser方法
但是,我得到的是“没有为这个对象定义无参数构造函数”。错误
我试图从视图中向控制器调用添加一个参数,但是到达控制器的页面模型为null。我只想在页面上显示用户数据后,让用户更新一些信息并将其发送回控制器,这样我就可以将其保存在数据库中。我错过了什么?我没有使用剃须刀引擎,只有经典的MVC3。感谢您的帮助。当模型绑定器尝试填充对象(视图模型)时,如果找不到公共/无参数构造函数(oh rly?),则会发生错误 范例 视图模型
public class CustomerViewModel {
public CustomerViewModel() { // <- public constructor without params.
Created = DateTime.Now;
}
public Guid CustomerId { get; set; }
public DateTime Created { get; set; }
public AddressViewModel Address { get; set; }
}
public class AddressViewModel {
public AddressViewModel(Guid customerId) { // <- BOOM! AddressViewModel have none parameterless constructor, so it can't be created
CustomerId = customerId;
}
public Guid CustomerId { get; set; }
public string Street { get; set; }
public string ZipCode { get; set; }
public string Country { get; set; }
public CustomerViewModel Customer { get; set; }
}
希望有帮助。您应该显示表单标记。输入的名称需要与ActionResult中用作参数的对象上的属性名称完全匹配。我添加了用于查看的标记。它是从页面模型创建的。您能显示控制器的其余代码吗?只有另一个方法称为Index()。我是否需要在global.asax中注册一个新路由,并将控制器名称、操作和对象作为参数?!
public class CustomerViewModel {
public CustomerViewModel() { // <- public constructor without params.
Created = DateTime.Now;
}
public Guid CustomerId { get; set; }
public DateTime Created { get; set; }
public AddressViewModel Address { get; set; }
}
public class AddressViewModel {
public AddressViewModel(Guid customerId) { // <- BOOM! AddressViewModel have none parameterless constructor, so it can't be created
CustomerId = customerId;
}
public Guid CustomerId { get; set; }
public string Street { get; set; }
public string ZipCode { get; set; }
public string Country { get; set; }
public CustomerViewModel Customer { get; set; }
}
[HttpPost]
public ActionResult UpdateCustomer(CustomerViewModel customer) {
// when modelbinder are trying to create the 'customer', it sees that CustomerViewModel have an AddressViewModel(which have none parameterless constructor) property, and you know what happen.
}