我在模型中使用复合类型作为字段。
我的模型中有一个名为PersonDetails的字段
public Phone PhoneDetails{get;set;}
手机是另一个包含其他三个字段的模型
int MobilePhone;
int WorkPhone;
int HomePhone;
PersonDetails是我传递添加弹出窗口的模型。 PersonDetails有以下字段:
public String Name{get;set;}
public Phone PhoneDetails{get;set;}
public string Address{get;set;}
我可以将Required
字段属性应用于其余字段,但我想
将Required
属性应用于PhoneDetails
字段。条件是三个中的至少一个,即MobilePhone,WorkPhone或HomePhone应该有一个值。
我该如何解决这个问题?
答案 0 :(得分:2)
一种方法是实现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个电话号码”。
答案 1 :(得分:0)
对于这种类型的验证,我总是使用FluentValidation。
它允许比属性/注释更复杂的验证方案,并且与MVC(以及一般的所有.NET代码)非常兼容
使用NuGet将其添加到您的项目中 - 提供了大量示例和文档。