如何在组合模型上应用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)中至少有一个应该有值。

我该如何解决这个问题?

如何在组合模型上应用Required属性

一种方法是实现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将其添加到您的项目中-有大量的示例和文档可用。