我正在玩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 验证器具有有效结果时出现。
有什么想法吗?
答案 0 :(得分:0)
只需订购结果:
var results = (
from result in vt.Validate(instance)
orderby result.Validator.GetType()
select result)
.ToArray();