Gdzie mogę znaleźć listę błędów, które powodują, że parametr ModelState jest nieprawidłowy? Nie widziałem żadnej właściwości errors w obiekcie ModelState.
120
Gdzie mogę znaleźć listę błędów, które powodują, że parametr ModelState jest nieprawidłowy? Nie widziałem żadnej właściwości errors w obiekcie ModelState.
O „czy to możliwe, że 0 błędów i IsValid == false”: oto kod źródłowy MVC z https://github.com/Microsoft/referencesource/blob/master/System.Web/ModelBinding/ModelStateDictionary.cs#L37-L41
public bool IsValid {
get {
return Values.All(modelState => modelState.Errors.Count == 0);
}
}
Teraz wygląda na to, że to niemożliwe. Cóż, to dla ASP.NET MVC v1.
Ponieważ prawdopodobnie programujesz w Visual Studio, lepiej skorzystaj z możliwości użycia punktów przerwania dla tak łatwych kroków debugowania (aby dowiedzieć się, na czym polega problem w Twoim przypadku). Po prostu umieść je tuż przed / w miejscu, w którym sprawdzasz ModelState.isValid i najedź kursorem na ModelState. Teraz możesz łatwo przejrzeć wszystkie wartości wewnątrz i zobaczyć, jaki błąd powoduje, że isvalid zwraca false.
źródło
var asdf = ModelState.Values.Where(v => v.Errors.Count > 0);
może ci pomócWklej poniższy kod w ActionResult kontrolera i umieść debuger w tym miejscu.
źródło
lub iteruj z
źródło
Czasami spinacz zgłasza wyjątek bez komunikatu o błędzie. Możesz pobrać wyjątek za pomocą następującego fragmentu kodu, aby dowiedzieć się, co jest nie tak:
(Często, jeśli spinacz próbuje przekonwertować ciągi na złożone typy itp.)
źródło
Jeśli usuniesz sprawdzanie dla ModelsState.IsValid i pozwolisz na błąd, jeśli skopiujesz ten wiersz
((System.Data.Entity.Validation.DbEntityValidationException)$exception).EntityValidationErrors
i wkleisz go w sekcji obserwacyjnej w programie Visual Studio, otrzymasz dokładnie, jaki jest błąd. Oszczędza dużo czasu, sprawdzając, gdzie jest błąd.źródło
Właściwość ModelState kontrolera jest w rzeczywistości obiektem ModelStateDictionary. Możesz iterować za pomocą kluczy w słowniku i użyć metody IsValidField, aby sprawdzić, czy to konkretne pole jest prawidłowe.
źródło
Tak jak mi się właśnie przydarzyło - może się to również zdarzyć, gdy dodasz wymaganą właściwość do swojego modelu bez aktualizacji formularza. W takim przypadku podsumowanie walidacji nie wyświetli komunikatu o błędzie.
źródło