StringLength im ViewModel die Einstellung nicht maxlength auf textbox
Hier die Eigenschaft im ViewModel:
[Display(Name = "Ext.")]
[MaxLength(6, ErrorMessage = "Must be a maximum of 6 characters")]
[StringLength(6)]
public string Extension { get; set; }
Und aus meiner Sicht:
@Html.EditorFor(model => model.Extension)
Und es macht:
<input class="text-box single-line" data-val="true" data-val-length="The field Ext. must be a string with a maximum length of 6." data-val-length-max="6" id="Extension" name="Extension" type="text" value="" />
Sollte diese Einstellung der maxlength-Attribut auf meiner textbox? Wenn nicht, wie kann ich das machen mit DataAttributes?
- Haben Sie überprüft, wenn du kannst auch einen string länger ist als 6 Zeichen?
- Bekomme ich ein Fehler bei der überprüfung, aber ich will es eigentlich legen Sie die maxlength-Attribut.
- Wenn Sie es ändern, um
TextBoxFor
Sie übergeben können HTML-Optionen. - Ja, aber ich würde gerne das Attribut, dass ich im ViewModel zu kontrollieren, diese wenn möglich.
- Wenn Sie mit
unobtrusive validation
dieser Beitrag könnte hilfreich sein
Du musst angemeldet sein, um einen Kommentar abzugeben.
ASP.NET MVC stellt ein erweiterbares system für genau dieses. Hier ist, was Sie tun müssen:
ModelMetadataProvider
.StringLengthAttribute
oder dieMaxLengthAttribute
haben, extrahieren Sie die Informationen und fügen Sie Sie derModelMetadata
.Schritt 1: Implementieren Sie eine benutzerdefinierte
ModelMetadataProvider
.Erstellen einer Klasse, abgeleitet von
ModelMetadataProvider
. In der Regel würden Sie ableiten aus derDataAnnotationsModelMetadataProvider
wie diese bietet einige Standard-Funktionalität, das heißt, Sie haben nur zu überschreiben einer einzigen Methode namensCreateMetadata
.Schritt 2: Extrahieren der Informationen:
Verwenden, um die Informationen, die Sie brauchen, um für das Attribut, extrahieren Sie die maximale Länge, die Informationen und fügen Sie Sie der
AdditionalValues
Wörterbuch derModelMetadata
. Die Umsetzung würde wie folgt Aussehen (dies ist die gesamte Umsetzung):Damit ASP.NET MVC zu verwenden, das Sie brauchen, um es zu registrieren, in der
Application_Start
Methode inGlobal.asax
.Schritt 3: Erstellen Sie einen benutzerdefinierten editor-template.
Nun müssen Sie eine Ansicht erstellen, die die Informationen verwendet. Erstellen Sie eine neue Ansicht namens
String
imViews\Shared\
Ordner.String.cshtml
Wenn Sie Ihre Anwendung ausführen, erhalten Sie die folgende HTML-Ausgabe durch Aufruf
@Html.EditorFor
.Wenn du mehr wissen möchtest über die Modell-Metadaten-provider-system, Brad Wilson verfügt über eine Reihe von blog-posts, die detailliert, wie es funktioniert (diese geschrieben wurden, bevor der Razor view engine, so dass einige der view-Syntax, ist ein bisschen funky, aber ansonsten sind die Daten auch sound).
Beruht im wesentlichen auf Brads Antwort, verpackt in einer Erweiterung auf das Html-helper mit einer lambda-syntax, so dass Sie nicht belasten Ihre Razor-Ansichten mit Reflexion Zeug:
Verwenden Sie es wie solche:
wo
x
bezieht sich auf Ihr Modell.Wenn die
StringLengthAttribute
ist nicht deklariert, die die Eigenschaftnull
zurückgegeben werden und diemaxlength
Attribut leer auf das textbox-element.Denken Sie daran, mit in Ihre razor-Seite so können Sie den Zugriff auf die Methode.
Dazu braucht es auch keine null-Lage führen, die für die Methode zu überwinden kompilieren Fehler.
Lief ich in etwas ähnliches, da war meine quick-and-dirty-Lösung:
oben in Ihrem .cshtml-Datei fügen Sie die Zeile:
unten in Ihre html-ersetzen Sie die "EditorFor" mit:
Ich schließlich beschlossen, ich würde lieber tun Sie es einfach im Skript:
aber wenn Sie nicht wollen, fügen Sie das Skript das erste Beispiel sollte funktionieren.