IValidatableObject
Mit der bedingten Validierungsfunktion von ASP.NET MVC können Sie Validierungsregeln definieren, die von anderen Modelleigenschaften abhängen. Dies ist von unschätzbarem Wert, wenn bestimmte Felder nur unter bestimmten Umständen validiert werden müssen.
Lassen Sie uns dies mit einem Person
-Modell veranschaulichen, das Name
, IsSenior
und eine verschachtelte Senior
-Klasse mit einer Description
-Eigenschaft enthält. Wir benötigen Senior.Description
nur, wenn IsSenior
wahr ist.
Hier ist das Modell, das Datenanmerkungen verwendet (ein einfacherer, aber weniger flexibler Ansatz):
<code class="language-csharp">public class Person { [Required(ErrorMessage = "*")] public string Name { get; set; } public bool IsSenior { get; set; } public Senior Senior { get; set; } } public class Senior { [Required(ErrorMessage = "*")] // This validation is not conditionally applied yet. public string Description { get; set; } }</code>
Und ein entsprechender Ansichtsausschnitt (anschaulich):
<code class="language-html">@Html.LabelFor(m => m.Name) @Html.EditorFor(m => m.Name) @Html.ValidationMessageFor(m => m.Name) @Html.LabelFor(m => m.IsSenior) @Html.EditorFor(m => m.IsSenior) @Html.ValidationMessageFor(m => m.IsSenior) @Html.LabelFor(m => m.Senior.Description) @Html.EditorFor(m => m.Senior.Description) @Html.ValidationMessageFor(m => m.Senior.Description) </code>
IValidatableObject
Für eine robustere bedingte Validierung bietet ASP.NET MVC die IValidatableObject
-Schnittstelle. Durch die Implementierung der Validate
-Methode können Sie eine Validierungslogik basierend auf dem Gesamtzustand des Modells definieren.
Hier ist das verbesserte Person
Modell mit IValidatableObject
:
<code class="language-csharp">public class Person : IValidatableObject { public string Name { get; set; } public bool IsSenior { get; set; } public Senior Senior { get; set; } public IEnumerable<ValidationResult> Validate(ValidationContext validationContext) { if (IsSenior && string.IsNullOrEmpty(Senior?.Description)) yield return new ValidationResult("Description is required for senior citizens."); } }</code>
Dieser Ansatz bietet mehr Flexibilität und Kontrolle über Validierungsregeln. Ausführliche Informationen finden Sie in der entsprechenden Microsoft-Dokumentation (suchen Sie nach „IValidatableObject“ und ASP.NET MVC). Im obigen Beispiel wird für zusätzliche Sicherheit der Null-Bedingungsoperator (?.
) verwendet.
Das obige ist der detaillierte Inhalt vonWie implementiert man eine bedingte Validierung in ASP.NET MVC mithilfe von Datenanmerkungen und IValidatableObject?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!