Data Annotation
Eintrag zuletzt aktualisiert am: 11.01.2024
Eine Data
Annotation (Datenannotation) ist eine Festlegung für Bedingungen, die ein Datenobjekt erfüllen muss (Validierung) oder eine Art und Weise wie sich das Datenobjekt darstellen soll.
Data
Annotations sind .NET-Attribute (
Metadaten-Attribute), definiert im Namensraum
System.ComponentModel.Data
Annotations.
Sie werden verwendet in ASP.NET Dynamic Data (ab
.NET 3.5 SP1),
ASP.NET MVC und ab ASP
.NET 4.5 auch in ASP.NET
Webforms Model Binding.
Auch moderne
GUI-Frameworks wie
Blazor berücksichtigen zumindest einen Teil der
Annotationen.
Data
Annotations können auf Klassen- oder
Propertyebene angewendet werden.
Beispiele:
[DisplayColumn("MitarbeiterNr")]
[ScaffoldTable(false)]
[Display(Name = "Beschriftung")]
[Range(0,250)]
[Required]
[StringLength(1, ErrorMessage="Bitte nur ein Zeichen!")]
[ScaffoldColumn(false)]
[DisplayFormat(DataFormatString = "{0:dd.MM.yyyy HH:mm}", ApplyFormatInEditMode=true, NullDisplayText="Keine Angabe",ConvertEmptyStringToNull=true)]
[RegularExpression(@"\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*", ErrorMessage="Keine gültige E-Mail-Adresse!")]
[FilterUIHint("FilterName")]
Entwickler können eigenen Datenannotationen schreiben, z.B.
/// <summary>
/// Eigene Validierungsklasse
/// Auswahl muss aus einer vorgegebene Menge von Zeichenketten kommen
/// </summary>
public class ChoiceAttribute : ValidationAttribute
{
public List<string> Choices { get; set; }
public ChoiceAttribute(params string[] choices)
{
this.Choices = choices.ToList();
}
public override bool IsValid(object value)
{
return (Choices.Contains(value.ToString()));
}
}
Diese Validierungsannotation kann dann so angewendet werden:
[Choice("Rom", "Berlin", "Moskau", "Essen-Mülheim")]
public object Abflugort;
Details
Die Datenannotation im Namensraum
System.ComponentModel.Data
Annotations gibt es schon seit dem klassischen .NET Framework. Die ersten (z.B. [RegularExpression], [Range], [DataType]) wurden in
.NET Framework 3.5 eingeführt. Weitere folgten in
.NET Framework 4.0 (z.B. [Display], [Editable]) und
.NET Framework 4.5 (z.B. [MaxLength], [Compare], [CreditCard], [Phone]). Diese Datenannotation werden auf Klassen oder Properties verwendet. Sie dienen der Spezifikation der Darstellung (z.B. [Display], [Editable]) oder der Validierung von Werten (z.B. [RegularExpression], [Compare], [Range], [Phone] und [CreditCard]).
GUI-
Steuerelemente müssen die entsprechenden
Annotationen berücksichtigen.
Es gibt nur wenige
Steuerelemente, die die Darstellungsannotationen berücksichtigen – meist schaffen sich .NET-Entwicklerinnen und Entwickler hier selbst
Steuerelemente, die auf Basis solche Metadaten ein grafische Benutzeroberfläche "on the fly" zur Laufzeit erzeugen. Bei den Validierungsannotationen gibt es mehr
Steuerelemente, die die
Annotationen berücksichtigen, z.B. <InputText>, <InputNumber> und <InputDate> in
Blazor.
Eine Validierung kann man auch unabhängig von einem
Steuerelement im Programmcode ausführen. Dazu gibt es die Klassen ValidationContext,
Validator, ValidationResult und Validation
Exception