Sprawdzam moją bazę danych, Create(FooViewModel fvm){...}
aby sprawdzić, czy fvm.prop1
i fvm.prop2
już istnieją w tej kombinacji; jeśli tak, chcę dodać błąd do stanu modelu, a następnie zwrócić cały widok. Próbowałem:
public ActionResult Create(FooViewModel fvm){
if (ThatComboAlreadyExists(fvm)) {
ModelState.AddModelError("Model", "There is already one like that");
return View(fvm);
}
}
... ale nie wyświetla się żaden błąd w Html.ValidationSummary
, więc zakładam, że się pojawią. Podejrzewam, że „Model” nie jest właściwym kluczem, ale nie udało mi się znaleźć niczego po Google.
asp.net-mvc-2
asp.net-mvc-2-validation
modelstate
Scott Baker
źródło
źródło
Odpowiedzi:
W końcu natknąłem się na przykład użycia, którego szukałem - aby ogólnie przypisać błąd do Modelu, a nie jedną z jego właściwości, jak zwykle nazywacie:
ale użyj pustego ciągu dla klucza:
Komunikat o błędzie pojawi się
<%: Html.ValidationSummary() %>
zgodnie z oczekiwaniami.źródło
ModelState.AddError(errorMessage)
lubModelState.AddGlobalError(errorMessage)
... intuicyjne i łatwiej byłoby dowiedzieć się, jak dodać komunikat o błędzie niezwiązany z właściwościami żadnego modelu.@Html.ValidationMessage(string.Empty)
ValidationSummaryErrors(bool excludePropertyErrors)
Przeciążenie wyświetli wszystkie błędy sprawdzania poprawności, gdy jego argument jest fałszywy lub tylko non-własność-specyficzne (key = „”) błędów, jeśli jego argumentem jest to prawda.Możesz dodać błąd modelu do dowolnej właściwości swojego modelu, sugeruję, jeśli nie ma nic związanego z tworzeniem nowej właściwości.
Jako przykład sprawdzamy, czy wiadomość e-mail jest już używana w DB, i dodajemy błąd do właściwości Email w akcji, więc kiedy zwracam widok, wiedzą, że wystąpił błąd i jak to pokazać, używając
i
źródło
(m=>m.email).SomeMagicToString()
?nameof
Operator przyjście w C # 6.0 rozwiązuje ten magiczny ciąg problemów. msdn.microsoft.com/en-us/magazine/dn802602.aspxUmieszczenie właściwości kropki w ciągach znaków działało dla mnie:
ModelState.AddModelError("Item1.Month", "This is not a valid date");
źródło