C#でのリストの検証

mkorman

DataAnnotationsモデルの検証に使用ています

モデルの非常に単純化されたバージョンは次のとおりです。

public class Model
{
    public List<Thing> Things;
}

public class Thing
{
    [Required]
    public string Name {get;set;}
}

面白いことにThing、名前のないを作成してモデルに追加すると、検証は失敗すると予想されますが、合格します(ショックホラー!)。

var model = new Model ();
var invalidThing = new Thing (); // No name would fail validation
model.Things.Add(invalidThing );

var validationContext = new ValidationContext(model);
var validationResults = new List<ValidationResult>();
var isValid = Validator.TryValidateObject(model, validationContext, validationResults, true);

Assert.False (isValid);  // This fails!

私が考えるその理由は、あなたがモデルを検証するとき、それはコレクションの場合、それはプロパティに項目を各プロパティを検証ではなく、ということです。Thingsは検証されていないプロパティであるため、合格します(無効なアイテムが含まれているにもかかわらず)。

検証によってコレクションプロパティのアイテムも検証されるようにするにはどうすればよいですか?すぐに使用できるバリデーターはありますか?

mkorman

各アイテムの検証をチェックするコレクションのカスタムバリデーターを作成することで、これを修正しました。簡略化されたコードは次のようになります。

public class ValidateEachItemAttribute : ValidationAttribute
{
    protected readonly List<ValidationResult> validationResults = new List<ValidationResult>();

    public override bool IsValid(object value)
    {
        var list = value as IEnumerable;
        if (list == null) return true;

        var isValid = true;

        foreach (var item in list)
        {
            var validationContext = new ValidationContext(item);
            var isItemValid = Validator.TryValidateObject(item, validationContext, validationResults, true);
            isValid &= isItemValid;
        }
        return isValid;
    }

    // I have ommitted error message formatting
}

このようにモデルを装飾すると、期待どおりに機能します。

public class Model
{
    [ValidateEachItem]
    public List<Thing> Things;
}

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

C#でACN(オーストラリアの会社番号)を検証する

分類Dev

C#でのURI検証

分類Dev

C#での画像検証

分類Dev

HTTPリクエストPlivoAPIでのC#認証

分類Dev

C#でのJson出力の検証

分類Dev

C#電卓のテキスト入力の検証

分類Dev

スキーマ検証の有効化でのC#逆シリアル化の失敗

分類Dev

C#アプリケーションでのPlinkセッションの使用に関するSSHホスト検証からの脱出

分類Dev

C#でのネストされたクラスプロパティの検証

分類Dev

APS.NET C#の送信ボタンを使用したドロップダウンリストの検証

分類Dev

PythonでのAlexaリクエストの検証

分類Dev

JavaでのJSONパッチリクエストの検証

分類Dev

サーバーでのGoogleAppScriptリクエストの検証

分類Dev

アレイでのLaravelリクエストの検証

分類Dev

Laravelでの配列リクエストの検証

分類Dev

検証リクエストの検証フックの後

分類Dev

C#のリストですべての重複を検索します

分類Dev

Laravelリクエスト日の検証

分類Dev

Excelの高度な動的検証リスト

分類Dev

リストでの属性の使用C#

分類Dev

C#でWindowsアプリケーションのソルトパスワードとユーザー名を検証する方法は?

分類Dev

MVC C#のクラスレベルバリデーターにクライアント検証を追加することは可能ですか?

分類Dev

コンソール環境でのC#カスタム属性の検証

分類Dev

マシュマロでの検証リスト

分類Dev

Golangで本文の検証をリクエストする

分類Dev

MockRestServiceServerでJSONリクエストの本文を検証する方法

分類Dev

タイプスクリプト検証小道具でのJSON解析

分類Dev

ReactorFluxでストリームの開始を検証します

分類Dev

GPGで署名を検証するためのスクリプト

Related 関連記事

  1. 1

    C#でACN(オーストラリアの会社番号)を検証する

  2. 2

    C#でのURI検証

  3. 3

    C#での画像検証

  4. 4

    HTTPリクエストPlivoAPIでのC#認証

  5. 5

    C#でのJson出力の検証

  6. 6

    C#電卓のテキスト入力の検証

  7. 7

    スキーマ検証の有効化でのC#逆シリアル化の失敗

  8. 8

    C#アプリケーションでのPlinkセッションの使用に関するSSHホスト検証からの脱出

  9. 9

    C#でのネストされたクラスプロパティの検証

  10. 10

    APS.NET C#の送信ボタンを使用したドロップダウンリストの検証

  11. 11

    PythonでのAlexaリクエストの検証

  12. 12

    JavaでのJSONパッチリクエストの検証

  13. 13

    サーバーでのGoogleAppScriptリクエストの検証

  14. 14

    アレイでのLaravelリクエストの検証

  15. 15

    Laravelでの配列リクエストの検証

  16. 16

    検証リクエストの検証フックの後

  17. 17

    C#のリストですべての重複を検索します

  18. 18

    Laravelリクエスト日の検証

  19. 19

    Excelの高度な動的検証リスト

  20. 20

    リストでの属性の使用C#

  21. 21

    C#でWindowsアプリケーションのソルトパスワードとユーザー名を検証する方法は?

  22. 22

    MVC C#のクラスレベルバリデーターにクライアント検証を追加することは可能ですか?

  23. 23

    コンソール環境でのC#カスタム属性の検証

  24. 24

    マシュマロでの検証リスト

  25. 25

    Golangで本文の検証をリクエストする

  26. 26

    MockRestServiceServerでJSONリクエストの本文を検証する方法

  27. 27

    タイプスクリプト検証小道具でのJSON解析

  28. 28

    ReactorFluxでストリームの開始を検証します

  29. 29

    GPGで署名を検証するためのスクリプト

ホットタグ

アーカイブ