Ich habe dieses Problem in meiner asp.net mvc-Anwendung.
In einem meiner Modelle gibt es ein Feld "Description". Die Datenbankspalte für diese Felder ist auf NVarchar(300)
festgelegt.
Aus meiner Sicht erstelle ich einen Textbereich wie folgt.
%Vor%Ich verwende "jquery.validate.unobtrusive.min.js" für die clientseitige Validierung. Wenn der Benutzer Textarten und die Inhaltslänge mehr als 300 Zeichen eingibt, wird die Meldung "Bitte geben Sie nicht mehr als 300 Zeichen ein" angezeigt.
Alles funktioniert gut, bis das folgende Szenario kommt. Der Benutzer gibt folgende Daten in den Textbereich ein.
%Vor%(dieser Inhalt hat 8 neue Zeilen)
Gemäß der "unaufdringlichen" Validierung hat dieser Inhalt die Länge 300 (zählt jede neue Zeile "\ n" als einzelnes Zeichen) , so dass die Validierung besteht und die Seite zurückgesendet wird.
In meinem C # -Code wird aufgrund der Kodierung der gleiche Inhalt für die Länge 308 (Zähle jede neue Zeile "\ r \ n" als 2 Zeichen), was den Datenbankbetrieb als fehlschlägt es erlaubt nur 300 Zeichen.
Wenn jemand sagt, dass ich StringLength
-Attribut auf dieser bestimmten Eigenschaft haben sollte, habe ich den folgenden Grund dafür, es nicht zu haben.
Wenn ich dieses Attribut einfüge, passiert die clientseitige Validierung für diese bestimmte Eigenschaft nicht, es geht zum Server und da das Modell nicht gültig ist, kommt es mit einer Fehlermeldung auf die Seite zurück.
Bitte beraten Sie mich, was könnte die mögliche Lösung dafür sein?
Nachdem ich mir die Lösung von @Chris näher angesehen habe, habe ich festgestellt, dass dies zu einer Endlosschleife für jedes Steuerelement außer textarea mit dem Attribut @maxlength
führen würde. Außerdem habe ich festgestellt, dass die Verwendung von value
(= der Wert des in den Validator übergebenen Textbereichs) die Zeilenumbrüche für führende und nachfolgende Zeilen bereits abgeschnitten hat, was bedeutet, dass die Datenbankoperation immer noch fehlgeschlagen ist diese Zeilenumbrüche.
Also hier ist meine Lösung:
Ich habe das in Chrome und ein paar IE-Versionen getestet und es hat gut für mich funktioniert.
Sie können das Verhalten für getLength in der Client-Validierung so ändern, dass Zeilenumbrüche doppelt gezählt werden, indem Sie Folgendes zu Ihrem JavaScript hinzufügen, nachdem Sie jquery.validate.js eingeschlossen haben. Dies führt dazu, dass die serverseitigen und clientseitigen Längenmethoden übereinstimmen, sodass Sie das StringLength-Attribut verwenden können (ich nehme an, Ihr Problem mit StringLength war, dass sich die Validierungsmethoden des Servers und des Clients unterschieden).
%Vor%Tags und Links asp.net-mvc javascript validation textarea newline