2009-08-28 10 views
3

私はobejectについて完全な検証を行い、それを処理する最良の方法を見つけようとしています。私はそれを持続する前にクラスを検証するためにdataannotationとXVALを使用したいが、私は複数のプロパティを必要とする複雑な検証を持ってxVal、クラス全体のDataAnnotations

public class LetterResponse { 
public Guid Id {get;set;} 
public bool SendBlankCart {get;set;} 
public string ToName {get;set;} 
public string ToAddress {get;set;} 
} 

は、以下のクラスを考えます。

疑似:私がするパラメータを期待してい

public class LetterResponseValidator : ValidationAttribute 
    { 
     public override bool IsValid(object value) 
     { 
      if (value.GetType() == typeof(LetterResponse)) 
      { 
       var letterResponse = (letterResponse) value; 
       if (letterResponse.SendBlankCard) 
       { 
        return true; 
       } else 
       { 
        if (string.IsNullOrEmpty(letterResponse.FromDisplayName) || string.IsNullOrEmpty(letterResponse.ToAddress1)) 
        { 
         return false; 
        } 
        return true; 
       } 

      } 
      return false; 
     } 
    } 

[LetterResponseValidator] 
public class LetterResponse { 
public Guid Id {get;set;} 
public bool SendBlankCart {get;set;} 
public string ToName {get;set;} 
public string ToAddress {get;set;} 
} 

をし、このような検証ルールを持っている:

if SendBlankCart { 
- no validation on ToName, ToAddress 
} else { 
ToName - required. 
ToAddress - required. 
} 

は、私はこのような注釈を付けたいですLetterResponseクラスのインスタンスですが、検証ランナーには決してコールされません。

誰もこれを処理する方法を知っていますか?

おかげで、

ハル

答えて

2

は、私は、これはあなたがクラスレベルのバリデータを持っているという事実に関係しているとは思いません。接続を除外するには、 "ToName"にダミーの必須バリデータを適用し、バリデータが呼び出されているかどうかを確認してください。それが呼び出されている場合は

、それがない場合は、あなたのGlobal.asax.csファイルでDataAnnotationsModelBinderを使用して標準modelbinderを上書きした場合、その後、あなたは確認する必要があり、私に知らせてください:については

ModelBinders.Binders.DefaultBinder = new DataAnnotationsModelBinder(); 

これと完全に動作するデモプロジェクトの詳細については、blog article about client-side validationをお読みください。

+0

Yep - 私のDataAnnotationランナーメソッドは、クラスレベルの属性ではなく、プロパティをチェックしていました。私はSystem.ComponentModel.DataAnnotationsで働くつもりですDataAnnotationsModelBinderを見つけることができますおかげで、ハル – Hal

+1

あなたは知っていますV 3.5 – Omu

+0

、別に私は上記のリンク先のブログの記事で説明したバグから.NETバージョン3.5で動作し、通常の1 。この資料では、バグを修正する方法も示しています。 –

関連する問題