给定一个如下所示的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." />


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

我想要这样的东西:

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


如何使用ASP.NET MVC 3.0实现此目的?

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

最佳答案

好吧,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验证能带来很多乐趣。 :)

关于asp.net-mvc-3 - 如何在客户端上将自定义ValidationAttribute呈现为“data-val-xx”属性?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4120792/

10-10 18:25
查看更多