Como usar Html.GetUnobtrusiveValidationAttributes ()
Estou tentando contornar o fato de que, quando escreveram o asp.net MVC 3, esqueceram de incluir código para adicionar atributos de validação discretos para selecionar listas e seus"consertar" para isso é incluí-lo no MVC 4, que não é muito útil para quem usa o MVC 3.
A minha solução proposta é usarHtml.GetUnobtrusiveValidationAttributes()
para adicioná-los, como qualquer outro atributo personalizado, mas não consigo descobrir a sintaxe correta para chamar o método. Existem 2 sobrecargas, uma pega uma string e a outra pega uma string e uma classe ModelMetaData. Eu entendo os parâmetros de metadados, presumo que apenas passoViewData.ModelMetadata
mas qual deve ser a string? A documentação do MSDN diz que é "o atributo de nome HTML especificado" que não faz sentido para mim. O atributo do nome HTML de quê? A lista de seleção? Por que seria necessário e como isso ajuda a saber para qual propriedade do meu modelo eu quero a validação? Olhando para exemplos de uso, todos parecem passar o nome da propriedade no meu modelo para o qual desejo os atributos de validação, o que faz sentido. Infelizmente, não consigo obter o método para retornar nada além de uma coleção vazia, não importa o que eu pass
Minha classe de modelo é chamada Event e minha propriedade é chamada EventTypeID. Estou usando uma classe viewmodel um pouco diferente como base para a exibição, porque preciso exibir uma lista de Eventos e também permitir que um novo evento seja inserido na mesma exibição, para que eu tenha uma classe viewmodel simples como abaixo:
public class EventViewModel
{
public Model.Event NewEvent { get; set; }
public IEnumerable<Model.Event> Events { get; set; }
}
A lista suspensa é mapeada para a propriedade como:@Html.DropDownListFor(model => model.NewEvent.EventTypeID
o que passo como string paraHtml.GetUnobtrusiveValidationAttributes(string)
ouHtml.GetUnobtrusiveValidationAttributes(string, ModelMetadata)
para obter os atributos para esta propriedade. Eu tentei
Html.GetUnobtrusiveValidationAttributes("EventTypeID")
Html.GetUnobtrusiveValidationAttributes("EventTypeID",ViewData.ModelMetadata)
Html.GetUnobtrusiveValidationAttributes("NewEvent.EventTypeID")
Html.GetUnobtrusiveValidationAttributes("NewEvent.EventTypeID",ModelMetadata)
odos retornam uma coleção vazi
Sei que meu modelo está correto, porque se eu alterar a chamada deHtml.DropDownListFor
paraHtml.TextBoxFor
então a validação "simplesmente funciona" sem que eu precise fazer outra coisa senão adicionar os atributos de validação à minha classe de model
EDITAR
Apenas tentei desativar a validação do lado do cliente, a validação funciona bem no servidor para todas as listas de seleçã