看起来其他人有这个问题,但我似乎无法找到解决方案.
我有2个型号:人物&计费信息:
public class Person { public string Name { get; set;} public BillingInfo BillingInfo { get; set; } } public class BillingInfo { public string BillingName { get; set; } }
我正在尝试使用DefaultModelBinder将此直接绑定到我的Action中.
public ActionResult DoStuff(Person model) { // do stuff }
但是,在设置Person.Name属性时,BillingInfo始终为null.
我的帖子看起来像这样:
“Name=statichippo&BillingInfo.BillingName=statichippo”
为什么BillingInfo总是为空?
解决方法
状态无重复.您的问题在其他地方,无法确定您从哪里获取信息.默认模型绑定器与嵌套类完美匹配.我已经无限次地使用它并且它始终有效.
模型:
public class Person { public string Name { get; set; } public BillingInfo BillingInfo { get; set; } } public class BillingInfo { public string BillingName { get; set; } }
控制器:
[HandleError] public class HomeController : Controller { public ActionResult Index() { var model = new Person { Name = "statichippo",BillingInfo = new BillingInfo { BillingName = "statichippo" } }; return View(model); } [HttpPost] public ActionResult Index(Person model) { return View(model); } }
视图:
<% using (Html.BeginForm()) { %> Name: <%: Html.EditorFor(x => x.Name) %> <br/> BillingName: <%: Html.EditorFor(x => x.BillingInfo.BillingName) %> <input type="submit" value="OK" /> <% } %>
发布值:Name = statichippo& BillingInfo.BillingName = statichippo完全绑定在POST操作中.同样适用于GET.
这可能不起作用的一种可能情况如下:
public ActionResult Index(Person billingInfo) { return View(); }