Asp.net mvc MVC如何处理有效的空模型绑定
是否有任何普遍接受的方法来处理以下场景,或者我是否设计得很糟糕 我有一些领域模型,例如:Asp.net mvc MVC如何处理有效的空模型绑定,asp.net-mvc,Asp.net Mvc,是否有任何普遍接受的方法来处理以下场景,或者我是否设计得很糟糕 我有一些领域模型,例如: public class Person { public int ID {get;set;} public string Name{get;set;} public int? AddressID {get;set;} }
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;}
}
<input value name="Address.AddressID" type="hidden">
然后我有一个视图模型:
public class Personnel
{
public Person Person{get;set;}
public Address Address{get;set;}
}
因此,我对人事模型有一个强类型视图,并说我在其中有这样的东西
@Html.HiddenFor(m => m.Address.ID)
@Html.EditorFor(m => m.Address.Street)
问题是,当我得到我的人员模型时,有时地址可以是空的,因为有时一个人没有地址。但是UI要求仍然显示输入文本框。当Address为null时,视图中的结果标记如下所示:
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;}
}
<input value name="Address.AddressID" type="hidden">
因此,当我发回控制器时,Address.ID的表单集合中的值有一个空字符串。
ModelState始终无效,因为绑定器无法将空字符串转换为int。
但我不希望它以任何方式绑定,因为实际上没有任何地址(假设用户没有输入任何信息)。如何让活页夹忽略地址字段?试试看
[HttpPost]
public ActionResult EditPersonnel(Personnel model)
{
if(model.Address.Equals(null))
model.Address = new Address();
if (ModelState.IsValid)
{
model.Save() // or whatever
}
return View(model);
}
试一试
实际上,如果视图需要model属性,则
Address
属性永远不应为null
。如果Person.AddressID
为null
,则将地址的“空”实例分配给personal.Address
属性:
// assuming you have a data object named "person"
if(!person.AddressID.HasValue) // or use person.AddressID == null
{
model.Address = new Address(); // assuming your view model is called "model"
}
实际上,如果视图需要model属性,则Address
属性永远不应为null
。如果Person.AddressID
为null
,则将地址的“空”实例分配给personal.Address
属性:
// assuming you have a data object named "person"
if(!person.AddressID.HasValue) // or use person.AddressID == null
{
model.Address = new Address(); // assuming your view model is called "model"
}
是正确的,如果您假设地址存在,或者您在一个“新”窗体上,没有对象,那么您应该将其初始化为一个空白地址。这也使更新更容易。如果您认为地址存在,或者您在“新”窗体上没有对象,则应将其初始化为空地址。这也使得更新更容易。