decir que tengo un modelo como esteHTML personalizada de ayuda que puede navegar DataAnnotations
public class User
{
[Required]
[StringLength(14, ErrorMessage = "Can only be 14 characters long")]
public string UserName;
}
Quiero crear un asistente de HTML así:
@Html.ValidatableEditorFor(m => m.UserName)
para que escupe un campo de texto con el formato correcto para jQuery Vaidation plugin para poder validar, así:
<input type="text" class="required" maxlength="14" />
de mi investigación, parece que no hay forma de iterar sobre todas las anotaciones de datos en un MetaDataModel para que pueda verificar cuáles son aplicables a jQuery Validation.
Cómo visualizo que trabajan en pseudo código:
var tag = new TagBuilder("input");
tag.mergeAttribute("type", "text");
foreach(var attribute in metadata.attributes)
{
CheckForValidatableAttribute(attribute, tag);
}
...
private void CheckForValidatableAttribute(DataAnnotation attribute, TagBuilder tag)
{
switch(attribute.type)
{
case Required:
tag.addClass("required");
break;
case StringLength
tag.mergeAttribute("maxlength", attribute.value)
break;
}
}
¿Cómo podría ir sobre la realización de un ayudante de esta manera? Quiero que funcione en las anotaciones de datos para que no tenga que duplicar los literales de validación.
Por ejemplo, los helpers Html actuales, como TextEditorFor, añaden atributos validables a sus campos de salida. ¿Cómo hace esto y cómo puedo hacer mi propia implementación?
Saludos
Pero no hay colección de MetaDataModel.Attributes. ¿Cómo puedo obtener una lista de todos los atributos que cualquier modelo en particular puede tener? – Chris
Ver mi actualización ... – Aliostad
Modifiqué el código ValidationEditorFor para que tome ValidationAttribute de la propiedad. Como estaba, estaba buscando los atributos en el Tipo de la propiedad (cadena, int, lo que sea). El código está funcionando bien ahora gracias! :) – Chris