3

ASP.NET MVCを使用しており、モデルのカスタム属性/データ注釈を介してカスタム検証を実装しています。

カスタム属性内のオブジェクトの親クラスのプロパティにアクセスすることは可能ですか?

public class MyModel
{
    [MyCustomValidator]
    public string var1 {get; set;}
    public string var2 {get; set;}
}

注:asp.netmvcを使用する

public class MyCustomValidatorAttribute : ValidationAttribute
{
    public bool override IsValid(Object value)
    {  
          // somehow get access to var2 in the MyModel
    }
}

したがって、基本的に、検証を行うと、特定の値について別のプロパティをチェックします。var2の値をパラメータとしてに渡そうとしましMyCustomValidatorたが、機能しません。

4

3 に答える 3

3

いいえ、基本的に。リフレクターを介してハントした後は、テスト対象のメンバーの値にのみアクセスできます。含まれているオブジェクトや、プロパティ/フィールドなどのメンバー情報にはアクセスできません。

私が同意するのは非常に制限的でイライラすることですが、これは4.0で修正されているようです-私の以前の返信はこれを示唆していましたが、4.0では、を介してこの情報を提供するIsValidを受け入れるオーバーロードがあります。ValidationContextObjectInstance

于 2010-01-23T08:50:25.253 に答える
1

validationContextどうやら、MVC2はDA3.5をターゲットにしているため、MVC2検証はサポートされていません。これがMVC2RCの場合でも当てはまるかどうかはわかりませんが、MVC 2Preview1でVS2010を使用しています。

http://forums.asp.net/p/1457591/3650720.aspxのBradWilsonの投稿から取得

3.5 SP1バージョンのDataAnnotationsには、MVC2が対象とする検証コンテキストはありません。[CustomValidation]属性もDA4.0の成果物であるため、カスタム検証を作成するには、ValidationAttributeから派生した新しい検証属性を作成する必要があります。

于 2010-01-31T05:37:57.977 に答える
0

これはMVC3で実行できることに注意してください。

public class MyCustomValidatorAttribute : ValidationAttribute
{
    public bool override IsValid(Object value)
    {  
          var model = validationContext.ObjectInstance as MyModel; 
          // would probably use reflection and pass property names instead of casting in real life

          if (model.var2 != null && value == null)
          {
            return new ValidationResult("var1 is required when var2 is set");
          }

          return ValidationResult.Success;
    }
}
于 2010-11-24T14:56:22.993 に答える