Sto usando asp.net mvc 3 con validazione jQuery discreta. Recentemente ho cambiato da DataAnnations standard a FluentValidation e funziona alla grande.validazione clientide mvc per proprietà nidificate (raccolta)
Il mio motivo principale per il rilevamento di FluentValidation è stata la necessità di convalidare proprietà nidificate sul mio viewmodel (ma ho trovato che ci sono altri motivi interessanti per utilizzarlo) che assomiglia a questo (non importa che gli utenti siano pseudo):
class Vm {
string Prop;
string AnotherProp;
IEnumerable<ElementsVm> Elements;
}
class ElementsVm {
bool Required;
string Id;
string Title;
string Value;
}
Utilizzando FluentValidation Faccio un validatore per VM e per ElementVm e mio test di unità sono verdi, mostrandomi lato server convalida sta lavorando.
Lato client, "Prop" e "AnotherProp" funzionano: le mie regole di convalida eseguono anche il lato client come previsto (come farebbero con DataAnnontation), ma tutti i miei elementi non ricevono alcuna convalida sul lato client a tutti - Ispeziono il dom e posso vedere tutti gli attributi data-val, data-required ecc. mancanti.
Ho provato diversi approcci per generare l'html nelle mie viste, ma "Prop" e "AnotherProp" sono generati usando Html.TextBoxFor (m => m.Prop) mentre i miei elementi sono generati in un partial - questo è dove iniziano i problemi. Se scelgo Html.TextBoxFor (m => m.Value) tutte le mie caselle di testo elemento avranno lo stesso nome/id, quindi ho anche provato a utilizzare Html.TextBox (Model.Id) per generare un ID/nome univoco, ma ancora nessuna proprietà di convalida .
Quindi c'è un modo per far funzionare il mio senario - non mi dispiace riscriverlo un po ', ma mi piacerebbe molto che FluentValidation scriva il mio html per me.
La mia soluzione di ripiego sarebbe quello di rendere i miei aiutanti HTML per generare la correttezza del codice HTML con gli attributi, ma che avrebbe fatto schifo, credo, dal momento che avrei dovuto tenere aggiornata questi aiutanti quando/sono state effettuate a uno FluentValidation nuove release patch, validazione jquery o il collegamento in mvc tra i due.
Grazie! Funziona e dovrebbe essere contrassegnato come risposta. – JustinP8
Inoltre, non dimenticare di reimpostare 'ViewData.TemplateInfo.HtmlFieldPrefix =" "' se hai input dopo il ciclo. – JustinP8
@ JustinP8, @counsellorben, @Per: Sto avendo lo stesso problema, ma questo non l'ha risolto. Sto usando EditorTemplates per la mia collezione nidificata e tutti gli attributi 'id' del tag 'input' sono già preceduti dall'appropriato/equivalente "Elements [0]". Il 'ViewData.TemplateInfo.HtmlFieldPrefix' è utile sapere, ma non il problema per me. @Per ha affermato che mancano gli attributi "data-val, data-required etc.". Ho notato la stessa cosa. – tkerwood