Heim >Backend-Entwicklung >C++ >Wie implementiert man eine bedingte Validierung in ASP.NET MVC?

Wie implementiert man eine bedingte Validierung in ASP.NET MVC?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2025-01-08 17:31:41326Durchsuche

How to Implement Conditional Validation 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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn