为了注册新成员,我有一个名为 UserRegisterModel
的 ViewModel。此模型从用户那里获取两种地址,必需 HomeAddress
和可选 WorkAddress
。为了获取地址,我使用了一个名为 ContactEntryModel
的复杂类型。我用 [Required]
属性装饰了我的 ContactEntryModel 成员,这导致家庭和工作地址都得到自动验证。
我正在寻找一种将 WorkAddress 标记为Ignored 或 Excluded 的解决方案,并告诉验证引擎停止验证 WorkAddress 子属性,即使它们装饰有验证属性。
public class UserRegisterModel
{
[StringLength(50), Required]
public string FirstName { get; set; }
[StringLength(50), Required]
public string LastName { get; set; }
[StringLength(10), Required]
public string IdCardNo { get; set; }
[StringLength(100), Email]
public string Email { get; set; }
public ContactEntryModel HomeContact { get; set; } //Required
public ContactEntryModel WorkContact { get; set; } //Optional
}
public class ContactEntryModel
{
[MaxLength(4), Required]
public string TelPrefix { get; set; }
[MaxLength(10), Required]
public string Tel { get; set; }
[MaxLength(50), Required]
public string Province { get; set; }
[MaxLength(50), Required]
public string City { get; set; }
[MaxLength(300), Required]
public string AddressLine { get; set; }
[MaxLength(20)]
public string PostalCode { get; set; }
}
最佳答案
执行此操作的最佳方法是创建一个根据您的情况适当装饰的自定义 View 模型。
另一个版本是告诉您的模型 Binder 忽略这些字段(这也会跳过验证)。您可以使用 Bind 属性执行此操作:
[Bind(Exclude="WorkAddress")]
public ActionResult DoSomething(UserRegisterModel model)
{
//controller code here
}
关于asp.net-mvc - 排除一些子成员获得验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10894329/