ホームページ >バックエンド開発 >C++ >ASP.NET MVCで条件付き検証を実装するにはどうすればよいですか?

ASP.NET MVCで条件付き検証を実装するにはどうすればよいですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2025-01-08 17:31:41326ブラウズ

How to Implement Conditional Validation in ASP.NET MVC?

ASP.NET MVC での条件付き検証の実装

ASP.NET MVC のデータ注釈は、モデル プロパティの検証を実行する便利な方法を提供します。ただし、フィールドの有効性が別のフィールドの値に依存する場合、条件付き検証ルールの実装が必要になる場合があります。

例: 条件付き必須フィールド

次のシナリオを考えてみましょう。「IsSenior」プロパティと説明を含む「Senior」プロパティを含む「person」モデルがあります。 「IsSenior」が true に設定されている場合にのみ、「Senior.Description」プロパティを必須フィールドにしたいと考えています。

データアノテーション方法

これは、データ注釈のみを使用した場合には不可能です。次のコードは、この制限を示しています:

<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 メソッド

ASP.NET MVC 3 では、IValidatableObject インターフェイスを使用した条件付き検証のためのより優れたソリューションが導入されています。モデルはこのインターフェイスを実装し、ValidationContext パラメーターを受け入れる Validate メソッドを提供する必要があります。このメソッドはカスタム検証ロジックを実行し、エラーが見つかった場合は ValidationResult オブジェクトのコレクションを返すことができます。

<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>

IValidatableObject インターフェイスを実装することにより、「IsSenior」の値に基づいて条件付き検証を実行できるようになりました。 「IsSenior」が true の場合、「Senior.Description」プロパティは必須フィールドになります。

構文の改善 (C# 6.0 以降)

C# 6.0 以降では、式本体のメンバーを使用して Validate メソッドを簡略化できます。

<code class="language-csharp">public IEnumerable<ValidationResult> Validate(ValidationContext validationContext) =>
    IsSenior && String.IsNullOrEmpty(Senior?.Description)
        ? new[] { new ValidationResult("必须提供描述。") }
        : Enumerable.Empty<ValidationResult>();</code>

上記の方法により、ASP.NET MVC で条件付き検証を効果的に実装できます。 Senior.Description に安全にアクセスし、null 参照例外を回避するには、null 条件演算子 (?.) を使用することに注意してください。

以上がASP.NET MVCで条件付き検証を実装するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。