想象一下,这样的模型:
[AddressValidation]
public AddressType[] Address { get; set; }
internal class AddressValidation : ValidationAttribute
{
public override bool IsValid(object value)
{
//Assume we are valid
var isValid = true;
//Cast to something useful
var addresses = (AddressType[])value;
var defaultAddresses = addresses.Count(a => a.AddressCode == AddressCodeEnum.@default);
if (defaultAddresses == 0)
{
ErrorMessage = "One address must be the default address";
isValid = false;
}
else if (defaultAddresses > 1)
{
ErrorMessage = "Only one address can be the default address";
isValid = false;
}
//Return the result
return isValid;
}
}
当控制器验证模型时,任何从属地址都会被正确验证,并且任何错误都将作为模型状态错误返回。但是,自定义属性的错误永远不会添加到modelstate,即使它验证为false。
似乎这应该有效,调用验证并且我可以逐步完成它 - 它永远不会被添加到模型状态。
想法?
答案 0 :(得分:0)
正在进行两种不同的检查,并且您希望返回两种不同错误中的一种,因此应将其拆分为两个属性。特别是,您无法在IsValid()方法本身中设置ErrorMessage属性。这些属性实例必须是不可变的。第一次框架读取ErrorMessage属性时就是这样。