Heim >Backend-Entwicklung >C++ >Wie implementiert man eine bedingte Validierung in ASP.NET MVC?
Implementierung der bedingten Validierung in ASP.NET MVC
Datenanmerkungen in ASP.NET MVC bieten eine praktische Möglichkeit, eine Validierung von Modelleigenschaften durchzuführen. Manchmal müssen Sie jedoch möglicherweise bedingte Validierungsregeln implementieren, bei denen die Gültigkeit eines Felds vom Wert eines anderen Felds abhängt.
Beispiel: Bedingt erforderliche Felder
Stellen Sie sich das folgende Szenario vor: Wir haben ein „Person“-Modell, das eine „IsSenior“-Eigenschaft und eine „Senior“-Eigenschaft enthält, die eine Beschreibung enthält. Wir möchten, dass die Eigenschaft „Senior.Description“ nur dann ein Pflichtfeld ist, wenn „IsSenior“ auf „true“ gesetzt ist.
Datenanmerkungsmethode
Dies ist nicht möglich, wenn nur Datenanmerkungen verwendet werden. Der folgende Code veranschaulicht diese Einschränkung:
<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 = "*")] public string Description { get; set; } }</code>
IValidatableObject-Methode
ASP.NET MVC 3 führt eine bessere Lösung für die bedingte Validierung mithilfe der IValidatableObject-Schnittstelle ein. Ihr Modell muss diese Schnittstelle implementieren und eine Validate-Methode bereitstellen, die einen ValidationContext-Parameter akzeptiert. Diese Methode kann eine benutzerdefinierte Validierungslogik ausführen und eine Sammlung von ValidationResult-Objekten zurückgeben, wenn Fehler gefunden werden.
<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("必须提供描述。"); } }</code>
Durch die Implementierung der IValidatableObject-Schnittstelle können wir jetzt eine bedingte Validierung basierend auf dem Wert von „IsSenior“ durchführen. Wenn „IsSenior“ wahr ist, wird die Eigenschaft „Senior.Description“ zu einem Pflichtfeld.
Verbesserte Syntax (C# 6.0 und höher)
In C# 6.0 und höher kann die Validate-Methode mithilfe eines Ausdruckskörperelements vereinfacht werden:
<code class="language-csharp">public IEnumerable<ValidationResult> Validate(ValidationContext validationContext) => IsSenior && String.IsNullOrEmpty(Senior?.Description) ? new[] { new ValidationResult("必须提供描述。") } : Enumerable.Empty<ValidationResult>();</code>
Mithilfe der oben genannten Methoden können wir die bedingte Überprüfung in ASP.NET MVC effektiv implementieren. Beachten Sie die Verwendung des NULL-Bedingungsoperators (?.), um sicher auf Senior.Description zuzugreifen und NULL-Referenzausnahmen zu vermeiden.
Das obige ist der detaillierte Inhalt vonWie implementiert man eine bedingte Validierung in ASP.NET MVC?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!