2013-03-08 14 views
7

Jak ustalić, który z kluczy w ModelState zawiera błąd, gdy wartość parametru ModelState.IsValid jest nieprawdaż? Zwykle po prostu najechałbym myszką na listę ModelState.Values, sprawdzając pozycję według pozycji dla liczby błędów> 0. Ale teraz pracuję nad widokiem, który ma kilka list złożonych obiektów, łącznie 252 elementów ModelState (każdy element każdego obiektu każdej listy ma wpis w ModelState.Keys).Jak ustalić, który klucz ModelState zawiera błąd

Czy istnieje łatwiejszy sposób wskazania źródła błędu?

Odpowiedz

13

Możesz sprawdzić kolekcję ViewData.ModelState.Values i zobaczyć, jakie są błędy.

[Httpost] 
public ActionResult Create(User model) 
{ 
    if(ModelState.IsValid) 
    { 
    //Save and redirect 
    } 
    else 
    { 
    foreach (var modelStateVal in ViewData.ModelState.Values) 
    { 
     foreach (var error in modelStateVal.Errors) 
     {    
      var errorMessage = error.ErrorMessage; 
      var exception = error.Exception; 
      // You may log the errors if you want 
     } 
    } 
    }   
    return View(model); 
} 
} 

Jeśli naprawdę chcesz Keys (nazwa własności), można iterację ModelState.Keys

foreach (var modelStateKey in ViewData.ModelState.Keys) 
{ 
    var modelStateVal = ViewData.ModelState[modelStateKey]; 
    foreach (var error in modelStateVal.Errors) 
    { 
     var key = modelStateKey; 
     var errorMessage = error.ErrorMessage; 
     var exception = error.Exception; 
     // You may log the errors if you want 
    } 
} 
+0

Pomogło mi to znaleźć problem. Nie było dokładnie to, czego szukałem, ale rozwiązany tak czy inaczej ... dzięki! – leobelones

+0

Działa to, ale nie odpowiada na pytanie; jak dowiedzieć się, który KLUCZ ModelState ma błąd. W tym rozwiązaniu pojawia się błąd, ale nie klucz, do którego należy ten błąd. Jak to osiągnąć? –

+1

@RensdeNobel Zaktualizowałem odpowiedź, aby uwzględnić to również. – Shyju

1
ModelState.Values.SelectMany(v => v.Errors); 

jest uważany za czystsze.

+1

Powoduje wyświetlenie tylko komunikatów o błędach bez kluczy. Nie do końca tego, czego szuka OP. – Azimuth

+0

ModelState.Keys – markthewizard1234

Powiązane problemy