所以我有以下对象
public class Person : IValidatableObject
{
[Required]
public string Name {get;set;}
[Required]
public string Status {get;set;
public Address Address {get;set;}
public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
{
if (Status != "Addressless" && Address == null)
{
yield return new ValidationResult("An address is required if this person is not addressless");
}
}
}
public class Address
{
[Required]
public string Address1 {get;set;}
[Required]
public string City {get;set;}
}
现在,我的问题是需要地址值,因为如果该人确实有地址,则 EF Code First 不需要地址表中 DB 中的空值。这似乎会导致问题,因为人员不需要地址,因此如果他们是“无地址”,则不应进行地址
验证,但验证仍然会开始,因为地址具有必填字段。
有办法解决这个问题吗?
最佳答案
原因
如chris-shouts描述于answer类似的问题。
When validating an object, the following process is applied in Validator.ValidateObject:
- Validate property-level attributes
- If any validators are invalid, abort validation returning the failure(s)
- Validate the object-level attributes
- If any validators are invalid, abort validation returning the failure(s)
- If on the desktop framework and the object implements IValidatableObject, then call its Validate method and return any failure(s)
您的案例
因此,在您的情况下,必需属性验证阻止您的 IValidationObject 被检查。
可能的解决方案
可能的解决方案是在验证方法中移动所需的地址检查
关于asp.net - 在嵌套对象上调用 MVC IValidatableObject,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13346545/