c# - Was bedeutet es, dass eine Eigenschaft[Erforderlich] und nullwertfähig ist?




asp.net-mvc data-annotations (3)

Was bedeutet es, dass eine Eigenschaft [Required] und nullwertfähig ist? (Beispiel unten) Wenn es [Required] es möglicherweise nicht null (kein Wert), und wenn es in der Lage ist, null es möglicherweise nicht [Required] .

[Required]
public DateTime? OrderDate { get; set; }

Der Grund dafür, dass eine Eigenschaft auf null gesetzt und mit dem Attribut [Required] wird, besteht darin, sich vor untergeordneten Angriffen zu schützen. Sie können auch einen anfänglichen leeren Wert in der Ansicht anstelle des Standardwerts für die Eigenschaft anzeigen. Dies erfolgt normalerweise mit Werttypeigenschaften in Ansichtsmodellen.

Bei einem untergeordneten Angriff ändert ein böswilliger Benutzer die Anforderung, um einen Wert für die Eigenschaft in der Anforderung wegzulassen. Wenn die Eigenschaft DateTime (nicht nullwertfähig) war, initialisiert der DefaultModelBinder den Standardwert ( 01/01/0001 ) und es wird kein ModelState Fehler generiert. Infolgedessen wird dieser Wert möglicherweise gespeichert, obwohl er möglicherweise nicht Ihren Erwartungen entspricht.

Wenn die Eigenschaft DateTime? (nullable) und [Required] . Wenn ein böswilliger Benutzer die Eigenschaft in der Anforderung ModelState , wird ein ModelState Fehler generiert, da in der Anforderung ein Wert erwartet wird und die Ansicht zurückgegeben wird, die ungültigen Daten also nicht gerettet werden.

Lesen Sie auch Brad Wilsons Artikel Eingabevalidierung vs. Modellvalidierung in ASP.NET MVC und den Abschnitt "Das Problem der Unterbuchung" .


Erforderlich ist eine Datenanmerkung für die Ansicht. Für die Ansicht muss ein Wert angegeben werden, bevor ein Formularbeitrag akzeptiert werden kann.

Dass der Wert nullwertfähig ist, hängt davon ab, was in der Datenbank zulässig ist. Ein Wert kann in der Datenbank null sein, oder der Wert kann als null beibehalten werden.

Sie sind getrennte Aspekte.


Es ist nullbar, sodass das Formular keinen Anfangswert wie 0001-01-01T00:00:00 , der keine Bedeutung hat.

Es ist erforderlich, den Benutzer zu zwingen, etwas einzugeben.







data-annotations