如何在组合模型上应用Required属性
本文关键字:应用 Required 属性 模型 组合 | 更新日期: 2023-09-27 18:10:08
我在模型中使用一个字段的复合类型。
我的模型中有一个名为PersonDetails的字段
public Phone PhoneDetails{get;set;}
Phone是另一个包含三个字段的模型
int MobilePhone;
int WorkPhone;
int HomePhone;
PersonDetails是一个模型,我正在传递添加弹出。PersonDetails有以下字段:
public String Name{get;set;}
public Phone PhoneDetails{get;set;}
public string Address{get;set;}
我可以将Required
Field属性应用于其余字段,但我想这样做将Required
属性应用于PhoneDetails
字段。条件是三个(即MobilePhone,WorkPhone或HomePhone)中至少有一个应该有值。
我该如何解决这个问题?
一种方法是实现IValidatableObject:
public class PersonDetails : IValidatableObject
{
public string Name { get; set; }
public Phone PhoneDetails { get; set; }
public string Address { get; set; }
public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
{
if (PhoneDetails.MobilePhone == 0 && PhoneDetails.WorkPhone == 0 && PhoneDetails.HomePhone == 0)
yield return new ValidationResult("Please enter at least 1 phone number", new[] { "PhoneDetails" });
}
}
如果您没有输入任何电话号码,那么您的表单将显示"请输入至少1个电话号码"。
对于这种类型的验证,我总是使用FluentValidation。
它允许比属性/注释更复杂的验证场景,并且与MVC(以及所有。net代码)非常兼容
使用NuGet将其添加到您的项目中-有大量的示例和文档可用。