简体   繁体   English

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

[英]How can I use validation in self property object in C#?

I'm developing a little ERP to my company and I crashed into a problem about validation: 我正在为公司开发一些ERP,但遇到了有关验证的问题:

I have self property object like: 我有类似的自我财产对象:

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

   public Person Contact { get; set; }
}

If HasContact is false, I don`t want put a Contact. 如果HasContact为假,我不想放一个Contact。 If is true, I want. 如果是真的,我要。

The problem is my ModelState never is Valid, because Name is Required and Contact self implement Person. 问题是我的ModelState永远不是有效的,因为名称是必需的并且Contact自己实现了Person。

I would like to set condition if HasContact is true, my application try validate the Contact property. 如果HasContact为true,我想设置条件,我的应用程序尝试验证Contact属性。 If is not, set Valid and execute controller correct. 如果不是,请设置有效并正确执行控制器。

Is it possible or am I crazy? 有可能还是我疯了?

You should have your object implement IValidatableObject . 您应该让您的对象实现IValidatableObject It lets you implement your own validation logic so you can ignore properties as necessary (see this SO question ). 它使您可以实现自己的验证逻辑,以便可以根据需要忽略属性(请参见此SO问题 )。

Your code might be something like this: 您的代码可能是这样的:

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;
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM