¿Cómo puedo tener una costumbre ValidationAttribute representa como un atributo 'data-val-xx' en el lado del cliente?

StackOverflow https://stackoverflow.com/questions/4120792

Pregunta

Dado un modelo de vista que es similar al siguiente:

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

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

Y una vista como esta (Razor sintaxis aquí):

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

Recibo el siguiente marcado:

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

Sin embargo, me gustaría que también incluirá un atributo 'Data-' para mi costumbre validador.

Quiero algo como esto:

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

¿Cómo puedo lograr esto con ASP.NET MVC 3.0?

por ejemplo. ¿Es necesario poner algún atributo especial en mi validador personalizado? O registrarse en alguna parte?

¿Fue útil?

Solución

Bueno, me salvó de MSDN (como suele ocurrir).

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

Así que primero tengo que crear un adaptador para mi atributo de validación:

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 };
    }
}

(La 'ValidationType' el ajuste de debe sea minúscula para que esto funcione, ya que este es el post-fix que será utilizado como un atributo HTML 5 - 'data-val-costumbre'. )

A continuación, todo lo que necesita hacer es registrarlo en Application_Start.

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

Mirando hacia adelante a un montón de diversión con la validación HTML5. :)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top