2009-07-14 8 views
38

Ich schreibe gerne Validierungsfunktionen in meinem Controller, die die ModelState ändern, wenn die Validierung fehlschlägt. Zum Beispiel:Was ist der Schlüsselparameter in ModelState.AddModelError in ASP.NET MVC?

private bool ValidateMoney(string raw, string name, decimal min, decimal max) { 
    try { 
     var dec = Convert.ToDecimal(raw); 

     if (dec < min) { 
      throw new ArgumentOutOfRangeException(name + " must be >= " + min); 
     } 
     else if (dec > max) { 
      throw new ArgumentOutOfRangeException(name + " must be <= " + max); 
     } 
    } 
    catch (Exception ex) { 
     ModelState.AddModelError(name, ex.GetUserMessage()); 
    } 
    return ModelState.IsValid; 
} 

Aber, ich weiß nie, was für dieses dumme „Schlüssel“ Argument ModelState.AddModelError zu setzen. (Im Beispiel habe ich es einfach auf den Namen meiner UI-Anzeige gesetzt.)

Was dachten die MVC-Entwickler, als sie es hinzufügten?

+3

Das Schlüsselargument genannt binden wird, ist gar nicht so dumm, vielleicht die Dokumentation nicht so klar ist, wie es sein sollte. :) – splattne

Antwort

52

Der Schlüssel wird vom ValidationMessage-HTML-Hilfsprogramm verwendet, um die genaue anzuzeigende Fehlermeldung anzuzeigen.

Beispiel:

<%=Html.TextBox("Name") %> <br /> 
<%=Html.ValidationMessage("Name") %> 

der Validation Helfer wird die Meldung angezeigt, dass Sie den Schlüssel „Name“ im Model Wörterbuch hat.

+6

Validierung wird in allen Arten von Anwendungen verwendet, nicht nur in Blogs. –

+2

@Frank respektvoll, ist das Feature nicht cool? Der Fehler erscheint direkt neben dem gewünschten Feld! Ich habe das erst erfahren, nachdem mich Google zu dieser Frage gebracht hat. – gideon

+4

Der Schlüssel kann eine leere Zeichenfolge sein, darf aber nicht null sein. Wenn der Schlüssel ein leerer String ist, kann er mit dem Html.ValidationSummary (false) html-Helfer gesehen werden –

9

Der Parameter key kann verwendet werden, um den Validierungsfehler einem Formularfeld zuzuordnen.

Wenn Sie @Html.TextBoxFor (oder ähnliches) verwendet haben und ein @Html.ValidationMessageFor, können Sie den Schlüssel des Wertes aus dem HTML-name des Feldes validiert (Verwendung Inspect Element) erhalten.

Wenn Sie haben gerade eine HTML <input> verwendet, können Sie eine Validierung Platzhalter mit @Html.ValidationMessage("AKeyIMadeUp") hinzufügen und eine Meldung in der es so erscheinen erhalten: ModelState.AddModelError("AKeyIMadeUp", "The value you entered is no good");.

1

Eigentlich können Sie einen beliebigen Validierungsnachricht gesetzt, während die Formulareinreichung erfolglose nehme an, Sie ein Feld

[Required] 
    [DataType(DataType.Password)] 
    [Display(Name = "Current password")] 
    public string OldPassword { get; set; } 

in Modell machen und während Model ungültig bekam können Sie Fehlermeldung binden mit diesem Feld wie nach.

ModelState.AddModelError("OldPassword", "Current Password do not match "); 

dann wird Ihre Fehlermeldung mit dem Feld in Modell „OldPassword“

Verwandte Themen