16

私はIValidatableObject何度か実装しましたValidationContextが、Validate メソッドへの解析の目的が何であるかはわかりませんでした。私の典型的なIValidatableObject実装は次のようになります。

 public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
 {
    if (Prop1 == Prop2)
    {
        yield return new ValidationResult(
              "Prop1 and Prop2 must be different.",
              new[] {"Prop1", "Prop2"});
    }
 }

私が逃したもので、使用できたものはありvalidationContextますか?

編集: ASP.NET MVC を使用していますが、これはコントローラーではなくクラスに実装されています。

4

2 に答える 2

9

ValidationContextプロパティが含まれていIServiceProviderます。DI コンテナーを検証属性と Validate メソッドに渡すための拡張ポイントです。例として、モデルで dbcontext への依存関係を設定せずにデータベースに対して検証するために使用できます。

于 2013-03-19T12:52:58.170 に答える
6

validationContext から取得する必要がありますProp1Prop2あなたの質問から、WebForms を使用しているか (プロパティにコードバインディングがあるか)、MVC を使用しているか (コントローラーでこれを実装しているかどうか) を判断するのは困難です。

public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
 {
    if (validationContext["Prop1"] == validationContext["Prop2"])
    {
        yield return new ValidationResult(
              "Prop1 and Prop2 must be different.",
              new[] {"Prop1", "Prop2"});
    }
 }
于 2013-03-19T12:16:52.033 に答える