如何在Composite Model上应用Required属性?

时间:2013-04-19 19:14:17

标签: c# asp.net asp.net-mvc asp.net-mvc-3

我在模型中使用复合类型作为字段。

我的模型中有一个名为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应该有一个值。

我该如何解决这个问题?

2 个答案:

答案 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将其添加到您的项目中 - 提供了大量示例和文档。