是否有任何普遍接受的方法来处理以下情况,或者我设计得不好?
我有一些域模型,例如:
public class Person
{
public int ID {get;set;}
public string Name{get;set;}
public int? AddressID {get;set;}
}
public class Address
{
public int ID{get;set;}
public string Street {get;set;}
}
然后我有一个这样的视图模型:
public class Personnel
{
public Person Person{get;set;}
public Address Address{get;set;}
}
所以我对 Personnel 模型有一个强类型视图,并说我有这样的东西
@Html.HiddenFor(m => m.Address.ID)
@Html.EditorFor(m => m.Address.Street)
问题是当我得到我的 Personnel 模型时,有时 Address 可能为空,因为有时 Person 没有地址。但是 UI 要求仍然显示输入文本框。当 Address 为 null 时,视图的结果标记如下:
<input value name="Address.AddressID" type="hidden">
我有一个这样的控制器
[HttpPost]
public ActionResult EditPersonnel(Personnel model)
{
if (ModelState.IsValid)
{
model.Save() // or whatever
}
return View(model);
}
因此,当我发回我的控制器时,Address.ID 的表单集合中的值有一个空字符串。ModelState 始终无效,因为绑定程序无法将空字符串转换为 int。但我不希望它绑定,因为真的没有任何地址(假设用户没有输入任何信息)。你如何让活页夹忽略地址字段?