2009-03-26 17 views

Odpowiedz

36

Patrząc na asp.net mvc source code, właściwość IsValid w ModelStateDictionary zwraca po prostu wartość true lub false w zależności od tego, czy w wartości ICostation ModelState przechowywanej we właściwości Values ​​występują błędy.

Powinieneś być w stanie znaleźć żadnych błędów w tym komunikacie i jak ten wyjątek:

foreach(var modelStateValue in ViewData.ModelState.Values) 
{ 
    foreach(var error in modelStateValue.Errors) 
    { 
     // Do something useful with these properties 
     var errorMessage = error.ErrorMessage; 
     var exception = error.Exception; 
    } 
} 
+0

To jest niesamowite! +1 – TheOptimusPrimus

4

mam biegł podobnego problemu, a przy użyciu tego samego rodzaju rutynę, że Steve dostarczonych znaleźć wyjątek został rzucony (niewdzięcznie) gdzieś wewnątrz domyślnego spoiwa modelu, który nie trafił do Html.ValidationSummary.

Problem w szczególności, że miałem był dropbox z "Tak" lub "Nie" opcji, wartości "1" i "0" (zamiast "prawda" i "fałsz"), a model Binder zakrztusił się przy próbie zamiany tych wartości na boolowskie (które oczekiwał członek mojej jednostki), stwierdzając, że 0 nie jest poprawną wartością dla Boolean.

Miałem nadzieję, że zostanie wygenerowany ładny komunikat stwierdzający, że mój wybór był nieważny, ale zamiast tego zostałem potraktowany jako pusty ValidationSummary. Wygląda na to, że wyjątek został połknięty! (i jest teraz czymś, czego będę szukał w przyszłości.) To powinno być może zgłoszone do MS jako błąd?

+0

Masz na to odpowiedź? –

+0

To było kilka lat temu i pamiętam problem, ale nie jestem pewien, czy pamiętam odpowiedź. Sądzę, że mogłem w końcu napisać specjalny kod przypadku, aby wykonać moją własną walidację, nie polegając już na domyślnym segregatorze. (To znaczy, sprawdzanie Request.Form bezpośrednio, aby dowiedzieć się błędów we własnym zakresie, zakładając, że ValidationSummary nie zawsze będzie pomocne.) To było z powrotem w MVC 2, nie jestem pewien, czy nadal jest tak w v4? – Funka

Powiązane problemy