Ich arbeite in MVC4 und möchte ein Modell mit einem Uppercase
Attribut definieren. Die Idee wäre, dass das Vorhandensein des Uppercase-Attributs dazu führen würde, dass der Modellwert beim Eintreffen am Server in Großbuchstaben konvertiert wird.Großbuchstaben-Attribut, das die Eingabe in Großbuchstaben umwandelt
Im Moment habe ich den folgenden Code innerhalb des Modells haben:
[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 würde Ich mag, ist dies:
[Required]
[Display(Name="Account Code")]
[StringValidation(RegExValidation.AccountCode)]
[Uppercase]
public string Account { get; set; }
Ich denke, dass ich das Versalien- Attribut erstellen müssen können als ValidationAttribute
um sicherzustellen, dass es ausgelöst wird, wenn das Modell den Server trifft. Aber das scheint ein bisschen falsch zu sein, da ich die Daten nicht wirklich validiere. Gibt es einen besseren Weg?
Gibt es auch eine Möglichkeit, die Aufrufreihenfolge für die Attribute zu gewährleisten? Ich möchte die Daten wirklich in Großbuchstaben konvertieren, bevor das benutzerdefinierte Attribut StringValidation
ausgelöst wird, da dies den Fall des Textes im Regex-Muster überprüft.
Um ein wenig Hintergrund hinzuzufügen, möchte ich die Notwendigkeit reduzieren, den Großbuchstaben der Daten Code hinzuzufügen. Das Nirvana wäre ein einzelnes Attribut, das die Daten auf dem Weg zum Server entweder in der Modellbindungs- oder Validierungsphase aktualisiert. Auf dieses Attribut kann dann im Attribut StringValidation
verwiesen werden, um den bei seinen Prüfungen verwendeten RegEx-Wert zu ändern. Ich kann dieses Attribut auch in einer benutzerdefinierten TextBoxFor
Hilfsmethode nachschlagen, so dass ich text-transform: uppercase
hinzufügen kann, damit es auf der Clientseite korrekt aussieht.
Hat jemand irgendwelche Ideen da draußen?
Das ist ziemlich cool! –
Hallo, gilt das für MVC 4? weil ich folgenden Fehler erhalte. 'UpperCaseValidationAttribute' implementiert kein Interface-Member 'System.Web.Mvc.IClientValidatable.GetClientValidationRules (System.Web.Mvc.ModelMetadata, System.Web.Mvc.ControllerContext)' Könnten Sie bitte helfen? Vielen Dank!! – ecasper
Ja, das funktioniert in MVC4. Sie müssen eine Überschreibung für 'public IEnumerable GetClientValidationRules (ModelMetadata-Metadaten, ControllerContext-Kontext) hinzufügen'. Dies war das Bit in der ... in der Antwort :) –
Nick