Estoy tratando de evitar el hecho de que cuando escribieron asp.net MVC 3 se olvidó de incluir código para agregar los atributos de validación discretos a las listas de selección y su "fix" para esto es incluir en MVC 4, que no es sangriento para cualquiera que use MVC 3.Cómo utilizar Html.GetUnobtrusiveValidationAttributes()
Mi trabajo propuesto es usar Html.GetUnobtrusiveValidationAttributes()
para agregarlos yo mismo, como cualquier otro atributo personalizado, pero no puedo encontrar la sintaxis correcta para llamar al método. Hay 2 sobrecargas, una toma una cadena y la otra toma una cadena y una clase ModelMetaData. Entiendo el param de metadatos, supongo que acabo de pasar el ViewData.ModelMetadata
, pero ¿cuál debería ser la cadena? La documentación de MSDN dice que es "el atributo de nombre HTML especificado" que no tiene sentido para mí. El atributo de nombre HTML de qué? La lista de selección? ¿Por qué lo necesitaría y cómo lo ayuda a saber qué propiedad de mi modelo quiero que valide? Mirando ejemplos de uso que todos parecen pasar en el nombre de la propiedad en mi modelo para los que quiero los atributos de validación, lo cual tiene sentido. Desafortunadamente no puedo obtener el método para devolver nada más que una colección vacía sin importar lo que pase.
Mi clase de modelo se llama Evento y mi propiedad se llama EventTypeID. Estoy utilizando una clase de viewmodel ligeramente diferente como base para la vista porque necesito mostrar una lista de eventos y también permitir que se ingrese un nuevo evento en la misma vista, así que tengo una clase simple de viewmodel como la siguiente:
public class EventViewModel
{
public Model.Event NewEvent { get; set; }
public IEnumerable<Model.Event> Events { get; set; }
}
La lista desplegable se asigna a la propiedad como: @Html.DropDownListFor(model => model.NewEvent.EventTypeID
¿qué paso como la cadena a Html.GetUnobtrusiveValidationAttributes(string)
o Html.GetUnobtrusiveValidationAttributes(string, ModelMetadata)
para obtener los atributos de esta propiedad. Lo he intentado:
Html.GetUnobtrusiveValidationAttributes("EventTypeID")
Html.GetUnobtrusiveValidationAttributes("EventTypeID",ViewData.ModelMetadata)
Html.GetUnobtrusiveValidationAttributes("NewEvent.EventTypeID")
Html.GetUnobtrusiveValidationAttributes("NewEvent.EventTypeID",ModelMetadata)
Todos devuelven una colección vacía.
Sé que mi modelo es correcto porque si cambio la llamada de Html.DropDownListFor
a Html.TextBoxFor
, entonces la validación "simplemente funciona" sin que tenga que hacer otra cosa que agregar los atributos de validación a mi clase de modelo.
EDIT:
Sólo intentado convertir la validación del lado del cliente en otro, la validación del lado del servidor funciona muy bien para todas las listas de selección.
que había visto que ya he publicado antes, no estoy seguro de entender plenamente el código de modo que he abstenido de usarlo. ¿Podría explicarme lo que estoy haciendo mal según mi pregunta y explicar lo que debería pasar a GetUnobtrusiveValidationAttributes() para obtener los atributos para mi modelo? –