我正在为公司开发一个小型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属性。如果不是,则设置“有效”并正确执行控制器。
有可能还是我疯了?
答案 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;
}