mvc validação do lado do cliente para propriedades aninhadas (coleção)
Estou usando o asp.net mvc 3 com validação discreta do jquery. Recentemente, mudei de DataAnnotations padrão para FluentValidation e funciona muito bem.
Meu principal motivo para escolher o FluentValidation foi a necessidade de validar propriedades aninhadas no meu viewmodel (mas descobri que existem outros motivos interessantes para usá-lo) que se parecem com isso (não se preocupe com acessadores, isso é pseudo):
class Vm {
string Prop;
string AnotherProp;
IEnumerable<ElementsVm> Elements;
}
class ElementsVm {
bool Required;
string Id;
string Title;
string Value;
}
Usando o FluentValidation, faço um validador para Vm e ElementVm e meus testes de unidade são verdes, mostrando que a validação no servidor está funcionand
Client side, 'Prop' e 'AnotherProp' estão funcionando - minhas regras de validação também estão sendo executadas no lado do cliente conforme o esperado (como faria com o DataAnnontation), mas todos os meus elementos não estão obtendo nenhuma validação no lado do cliente - eu inspeciono o dom e pode ver todos os atributos data-val, data-required etc. estão ausente
Tentei abordagens diferentes para gerar o html em meus modos de exibição, mas o 'Prop' e 'AnotherProp' são gerados usando Html.TextBoxFor (m => m.Prop) enquanto meus elementos são gerados em parte - é aqui que os problemas começam. Se eu escolher Html.TextBoxFor (m => m.Value), todas as minhas caixas de texto de elemento terão o mesmo nome / ID, então também tentei usar Html.TextBox (Model.Id) para gerar um ID / nome exclusivo, mas ainda sem propriedades de validação. .
Existe uma maneira de fazer meu senario funcionar - não me importo de reescrevê-lo um pouco, mas eu realmente gostaria que o FluentValidation escrevesse meu html para mi
minha solução de fallback seria criar meus próprios auxiliares de Html para gerar o Html correto com atributos, mas acho que seria péssimo, já que eu teria que continuar atualizando esses auxiliares quando novos lançamentos / patches fossem feitos para FluentValidation, validação de jquery ou o link em mvc entre os dois.