Groß-Attribut, das wandelt die Eingabe in Großbuchstaben
Arbeite ich in MVC4 und definieren wollen, ein Modell mit einem Uppercase
Attribut. Die Idee wäre, dass die Anwesenheit des Groß-Attribut bewirkt, dass der Modell-Wert werden in Großbuchstaben umgewandelt, wenn Sie angekommen auf dem server.
Im moment habe ich den folgenden code innerhalb des Modells:
[Required]
[Display(Name="Account Code")]
[StringValidation(RegExValidation.AccountCode, Uppercase=true)]
public string Account
{
get { return _account; }
set
{
if (value != null)
_account = value.ToUpper();
}
}
Aber was ich wirklich mag, ist dieses:
[Required]
[Display(Name="Account Code")]
[StringValidation(RegExValidation.AccountCode)]
[Uppercase]
public string Account { get; set; }
Ich denke, dass ich möglicherweise zu erstellen, die die Groß-Attribut als ValidationAttribute
um sicherzustellen, dass er gefeuert wird, wenn das Modell zuvor auf den server. Aber das scheint mir ein wenig falsch, ich bin nicht wirklich der Validierung der Daten. Gibt es einen besseren Weg?
Außerdem gibt es jede Möglichkeit, um sicherzustellen, die Anrufung, um auf die Attribute? Ich wirklich wollen, um zu konvertieren der Daten in Großbuchstaben umwandeln, bevor Sie die benutzerdefinierte StringValidation
Attribut feuert, als dieser überprüft den Fall der text in der regex-Muster.
Hinzufügen von ein wenig hintergrund zu dieser, ich möchte reduzieren die Notwendigkeit zum hinzufügen von code zu groß-die Daten. Das nirvana wäre ein einzelnes Attribut, das aktualisiert die Daten auf dem Weg in den server, entweder in der Modell-Bindung oder die Validierung der Bühne. Dieses Attribut kann dann verwiesen werden, in der StringValidation
- Attribut zur änderung der RegEx-Wert verwendet, in seine Prüfungen. Kann ich auch dann diese lookup-Attribut in einem benutzerdefinierten TextBoxFor
Helfer-Methode, so dass ich hinzufügen kann text-transform: uppercase
so sieht es richtig auf der client-Seite.
Hat jemand irgendwelche Ideen da draußen?
InformationsquelleAutor Nick | 2013-07-17
Du musst angemeldet sein, um einen Kommentar abzugeben.
Habe ich es geschafft, diese arbeiten, bis zu einem Punkt, also hier ist meine Lösung für andere zu beurteilen.
Einmal Punkt zu beachten war, dass die vollständige Lösung konnte nicht erzielt werden, weil ich es nicht geschafft, die
Modelmetadata
innerhalb derStringValidation.IsValid()
Attribut. Die Besondere Frage, die ich dabei hatte war, dass ich bekommen konnte, die Metadaten, aber ich konnte nicht diePropertyName
aus, nur dieDisplayName
. Es gab mehrere Optionen gibt, aber die Tatsache, dass einige meiner Eigenschaften haben die gleichenDisplayName
bedeutet, dass ich konnte nicht sicher sein, dass dieProprtyName
war die, die ich eigentlich bestätigen.Hier ist der code für die
ValidationAttribute
:Dann habe ich einen neuen
IModelBinder
Umsetzung:Und registriert, dass in meinem
Global.asax
Datei:Den code so weit verursachen alle string-input kommen in MVC werden in Großbuchstaben umgewandelt, wenn es
StringValidationAttribute
befestigt, um es auf das Modell, und wo die groß-Kennzeichen gesetzt ist.Weiter, um meinen Wunsch, dass die html-Formulare werden in Großbuchstaben zu, ich implementiert eine neue
EditorTemplate
namensstring.cshtml
. In dieser Ansicht habe ich Hinzugefügt:Mit dem CSS;
Hoffe, dieser Beitrag hilft einigen anderen da draußen.
Hi, funktioniert das bei MVC 4? denn ich erhalte folgende Fehlermeldung. 'UpperCaseValidationAttribute' nicht den Schnittstellenmember 'System.Web.Mvc.IClientValidatable.GetClientValidationRules(System.Web.Mvc.ModelMetadata, System.Web.Mvc.ControllerContext)' könnten Sie bitte helfen? Danke!!
Ja, das funktioniert in MVC4. Müssen Sie eine überschreibung für
public IEnumerable<ModelClientValidationRule> GetClientValidationRules(ModelMetadata metadata, ControllerContext context)
. Dies war der etwas in die ... in die Antwort 🙂Speichert er den Text in der Datenbank, die in Kapital-Form? @Nick
So weit wie der Controller weiß, der text ist stets in Großbuchstaben geschrieben. Vorausgesetzt, Sie übergeben, dass direkt in der db, dann müsste es ja Treffer der db in Großbuchstaben.
InformationsquelleAutor Nick
Du hast Recht,
ValidationAttribute
ist nicht die richtige Passform. Wie es scheint, tun dies auf der Modell-Bindung Bühne wäre eine bessere Idee. Sehen dieser Artikel für eine detaillierte Erklärung, wie das anpassen dieses Verhalten.Basiert auf Informationen, die es, glaube ich, sollten Sie in der Lage sein, um ein Attribut zu erstellen, basierend auf
CustomModelBinderAttribute
wie diese:Habe ich nicht getestet. Lassen Sie mich wissen, ob es funktioniert oder nicht.
AttributeUsageAttribute(AttributeTargets.Class|AttributeTargets.Struct|AttributeTargets.Enum|AttributeTargets.Interface|AttributeTargets.Parameter
Dann haben wir eine Ebene höher gehen. Müssen wir das Modell ändern, Bindemittel für die Klassen, enthält diese strings, ändern Sie die UppercaseAttribute, um eine einfache Kennzeichnung Attribut, und sagen, der binder Modell zu suchen, dieses Attribut und behandeln Sie die Saiten anders.
InformationsquelleAutor Daniel Schilling
HINWEIS:
Ich bin das hinzufügen zu diesem post, weil bis ich entdeckte dass der Ansatz, den ich jetzt benutze, habe ich dies gelesen und versucht, alle oben erfolglos.
Ich verwende in der Regel ein zwei Teil-Prozess beim Umgang mit zwingen Textdaten formatiert werden als Großbuchstaben. 1. bei der Ansicht und 2. auf der controller -
In der view-Schicht, so dass der Benutzer kennt die Daten verwendet werden, die in die Großbuchstaben bilden. Dies kann nach unten durch htmlAttributes verwendet in der "EditorFor" HTML-helper.
Nun dies erzwingt nur die Daten gesehen und durch den Benutzer eingegeben werden, in Großbuchstaben und nicht die Daten an den server gesendet. Das zu tun erfordert einigen code in der zugehörigen Methode im controller.
Füge ich die ToUpper () - Methode, um das target-Attribut in das object übergeben wird zurück an den Controller. Hier ist hypothetisches Beispiel zeigt dies.
InformationsquelleAutor Kram_Koorbse
Für die Web-API Zweck ist es besser, konvertieren das eingehende json-in groß-oder Kleinbuchstaben.
ODER Global;
InformationsquelleAutor Ghebrehiywet