如何在C#中的自我属性对象中使用验证?

时间:2018-07-16 20:40:10

标签: c# asp.net

我正在为公司开发一个小型ERP,但我遇到了有关验证的问题:

我有一个自我属性对象,例如:

public class Person
{
   [Required]
   public string Name { get; set; }
   public int Phone { get; set; }
   public bool HasContact { get; set; }

   public Person Contact { get; set; }
}

如果HasContact为假,我不想放置一个Contact。如果是真的,我想要。

问题是我的ModelState永远都不有效,因为名称是必填项,并且Contact自己实现了Person。

如果HasContact为true,我想设置条件,我的应用程序尝试验证Contact属性。如果不是,则设置“有效”并正确执行控制器。

有可能还是我疯了?

1 个答案:

答案 0 :(得分:0)

您应该使对象实现IValidatableObject。它使您可以实现自己的验证逻辑,以便可以根据需要忽略属性(请参阅此SO question)。

您的代码可能是这样的:

public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
{
    var results = new List<ValidationResult>();
    if (this.HasContact)
    {
        Validator.TryValidateProperty(this.Contact,
            new ValidationContext(this, null, null) { MemberName = "Contact" },
            results);
    }
    return results;
}