Ich möchte alle Fehlermeldungen aus dem modelState erhalten, ohne die Schlüsselwerte zu kennen. Durchlaufen, um alle Fehlermeldungen abzurufen, die der ModelState enthält.
Wie kann ich das machen?
asp.net-mvc
modelstate
chobo2
quelle
quelle
@Html.ValidationSummary()
anzeigen, können Sie sie schnell und messerscharf anzeigen.foreach (var error in ViewData.ModelState.Values.SelectMany(modelState => modelState.Errors)) { DoSomething(error); }
Antworten:
Siehe auch Wie erhalte ich die Sammlung von Modellstatusfehlern in ASP.NET MVC? .
quelle
Value.ErrorMessage
und stattdessen aValue.Exception.Message
foreach (KeyValuePair<string, ModelState> kvp in htmlHelper.ViewData.ModelState) {
und diese Zeile darunter einfügen :var modelState = kvp.Value;
. Sie können den Schlüssel vonkvp.Key
Verwenden von LINQ :
quelle
List<string> errors = new List<string>()
stattvar errors = new List<string>()
ist wirklich Zeitverschwendung, aber das SchreibenIEnumerable<ModelError> allErrors = ModelState.Values.SelectMany(v => v.Errors);
, bei dem der Rückgabetyp nicht wirklich klar ist, ist in Bezug auf die Lesbarkeit wirklich besser. (Auch wenn Visual Studio es Ihnen mit dem Mauszeiger geben kann)Aufbauend auf der LINQ-Version, wenn Sie alle Fehlermeldungen zu einer Zeichenfolge zusammenfassen möchten:
quelle
Ich konnte dies mit einem kleinen LINQ tun,
Die obige Methode gibt eine Liste von Validierungsfehlern zurück.
Weiterführende Literatur:
Lesen aller Fehler aus ModelState in ASP.NET MVC
quelle
Während des Debuggens finde ich es nützlich, am Ende jeder meiner Seiten eine Tabelle einzufügen, um alle ModelState-Fehler anzuzeigen.
quelle
Wie ich festgestellt habe, können Sie Ausnahmen befolgen, ohne dass Fehlermeldungen festgelegt wurden. Wenn Sie also alle Probleme abfangen, die wirklich erforderlich sind, müssen Sie sowohl die ErrorMessage als auch die Exception abrufen.
oder als Erweiterungsmethode
quelle
Falls jemand die Eigenschaft Name des Modells zurückgeben möchte, um die Fehlermeldung in einer stark typisierten Ansicht zu binden.
Auf diese Weise können Sie den Fehler tatsächlich mit dem Feld verknüpfen, das den Fehler ausgelöst hat.
quelle
Es reichte mir nicht aus, nur die Fehlermeldungen selbst auszugeben, aber das war der Trick.
quelle
Für den Fall, dass jemand es braucht, habe ich die folgende statische Klasse in meinen Projekten erstellt und verwendet
Anwendungsbeispiel:
Verwendung:
Klasse:
quelle
Und das funktioniert auch:
quelle
SelectMany
verfügbar ist.Nützlich zum Übergeben einer Reihe von Fehlermeldungen an View, möglicherweise über Json:
quelle
Dies erweitert die Antwort von @Dunc. Siehe XML-Dokumentkommentare
quelle
Darüber hinaus
ModelState.Values.ErrorMessage
kann leer sein,ModelState.Values.Exception.Message
kann aber auf einen Fehler hinweisen.quelle
In Ihrer Implementierung fehlt Ihnen die statische Klasse, dies sollte sein.
lieber
quelle
Verwenden Sie einfach den Asp-Validation-Summary Tag Helper
quelle