List <string> PropertyName未显示在modelState.errors </string>中

时间:2010-04-08 13:06:04

标签: asp.net asp.net-mvc-2 data-annotations

想象一下,这样的模型:

[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。

似乎这应该有效,调用验证并且我可以逐步完成它 - 它永远不会被添加到模型状态。

想法?

1 个答案:

答案 0 :(得分:0)

正在进行两种不同的检查,并且您希望返回两种不同错误中的一种,因此应将其拆分为两个属性。特别是,您无法在IsValid()方法本身中设置ErrorMessage属性。这些属性实例必须是不可变的。第一次框架读取ErrorMessage属性时就是这样。