5

我正在对模型中的字段使用复合类型。

我的模型中有一个名为 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字段属性应用于剩余字段,但我想将Required属性应用于PhoneDetails字段。条件是MobilePhone、WorkPhone 或HomePhone 这三者中的至少一个应该具有值。

我怎么解决这个问题?

4

2 回答 2

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 个电话号码”。

于 2013-05-03T15:31:42.480 回答
0

对于这种类型的验证,我总是使用 FluentValidation。

它允许比属性/注释更复杂的验证场景,并且与 MVC(以及所有一般的 .NET 代码)非常兼容

使用NuGet将其添加到您的项目中 - 提供了大量示例和文档。

于 2013-05-03T18:01:18.550 回答