看起来其他人有这个问题,但我似乎无法找到解决方案。
我有2个型号:Person&BillingInfo:
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();
}
注意如何调用action参数 billingInfo
,同名 BillingInfo
属性。确保这不是你的情况。
我有这个问题,答案就是盯着我看了几个小时。我在这里包括它因为我正在寻找没有绑定的嵌套模型而且得出了这个答案。
确保嵌套模型的属性(如您希望绑定适用的任何模型)具有正确的访问者。
// Will not bind!
public string Address1;
public string Address2;
public string Address3;
public string Address4;
public string Address5;
// Will bind
public string Address1 { get; set; }
public string Address2 { get; set; }
public string Address3 { get; set; }
public string Address4 { get; set; }
public string Address5 { get; set; }
这对我有用。
我改变了这个:
[HttpPost]
public ActionResult Index(Person model)
{
return View(model);
}
至:
[HttpPost]
public ActionResult Index(FormCollection fc)
{
Person model = new Person();
model.BillingInfo.BillingName = fc["BillingInfo.BillingName"]
/// Add more lines to complete all properties of model as necessary.
return View(model);
}
public class MyNestedClass
{
public string Email { get; set; }
}
public class LoginModel
{
//If you name the property as 'xmodel'(other than 'model' then it is working ok.
public MyNestedClass xmodel {get; set;}
//If you name the property as 'model', then is not working
public MyNestedClass model {get; set;}
public string Test { get; set; }
}
我有类似的问题。我花了很多时间意外地发现问题,我不应该使用'model'作为属性名称
@Html.TextBoxFor(m => m.xmodel.Email) //This is OK
@Html.TextBoxFor(m => m.model.Email) //This is not OK
我遇到了同样的问题,该项目的前任开发人员已将该属性注册到私有的setter,因为他没有在回发中使用此viewmodel。像这样的东西:
public MyViewModel NestedModel { get; private set; }
改为:
public MyViewModel NestedModel { get; set; }