7

给定一个看起来像这样的 ViewModel:

public class Login {
    [Required]
    public string Username { get; set; }

    [Required, CustomValidator]
    public string Password { get; set; }
}

像这样的视图(此处为 Razor 语法):

@Html.TextBoxFor(f => f.Password)

我得到以下标记:

<input type="text"
       value="" 
       data-val-required="This field is required." />

但是,我希望它还为我的自定义验证器包含一个“数据-”属性。

我想要这样的东西:

<input type="text" 
       value="" 
       data-val-required="This field is required."
       data-val-customvalidator="XYZ" />

如何使用 ASP.NET MVC 3.0 实现这一点?

例如,我是否需要在我的自定义验证器上添加一些特殊属性?还是在某个地方注册?

4

1 回答 1

8

好吧,MSDN 救了我(就像它经常做的那样)。

http://msdn.microsoft.com/en-us/library/ff398048.aspx

所以首先我必须为我的验证属性创建一个适配器:

public class CustomAttributeAdapter : DataAnnotationsModelValidator<EmailAttribute>
{
    public CustomAttributeAdapter(
        ModelMetadata metadata,
        ControllerContext context,
        CustomAttribute attribute) :
        base(metadata, context, attribute)
    {
    }

    public override IEnumerable<ModelClientValidationRule> GetClientValidationRules()
    {
        ModelClientValidationRule rule = new ModelClientValidationRule()
        {
            ErrorMessage = ErrorMessage,
            ValidationType = "custom"
        };
        return new ModelClientValidationRule[] { rule };
    }
}

('ValidationType' 设置必须是小写的才能工作,因为这是将用作 HTML5 属性的后修复 - 'data-val-custom'。)

然后我需要做的就是在 Application_Start 上注册它。

DataAnnotationsModelValidatorProvider.RegisterAdapter(
    typeof(EmailAttribute),
    typeof(EmailAttributeAdapter));

期待 HTML5 验证带来很多乐趣。:)

于 2010-11-08T07:42:14.283 回答