验证应用程序块 - 验证属性多个错误顺序

时间:2012-11-22 20:53:10

标签: validation enterprise-library validation-application-bl

我正在玩EL Validation Application Block。 使用属性进行验证时,不会遵循验证顺序。例如:

public class Boat
{
    [Display(Name="License Plate")]
    [RequiredStringValidator]
    [RangeValidator(1,10)]        
    public String RegistrationNumber
    {
        get;
        set;
    }

当我调用以下代码时:

Validator vt = CreateValidator(typeof(Boat), ruleSet);            
ValidationResults results = vt.Validate(instance);

results [0] - StringLengthValidator出错 结果[1] - RequiredStringValidator(自定义验证器)的错误

问题是订单并不总是一样的。碰巧RequiredStringValidator错误在0索引位置。使用 Attributes.GetCustomAttributes 检索它时,.Net CLR似乎不保证属性位置,这就是VAB获取属性属性的方式。

在此示例中,如果出现2个相同属性的错误,则应显示第一个属性错误(RequiredStringValidator),但有时会显示StringLengthValidator属性错误,因为它保留在ValidationResults的第一个位置。

使用ASP.NET MVC模型状态时会发生这种情况。

@Html.TextBoxFor(a => a.RegistrationNumber)
@Html.ValidationMessageFor(a => a.RegistrationNumber)

如果出现错误, StringLengthValidator 消息只应在 RequiredStringValidator 验证器具有有效结果时出现。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

只需订购结果:

var results = (
    from result in vt.Validate(instance)
    orderby result.Validator.GetType()
    select result)
    .ToArray();