2012-04-27 7 views
0

私は検証属性で注釈を付けられたプロパティを持っています。 属性のSetValidメソッドの前に呼び出されたプロパティのセッターが、なぜより重要なのですが、値を設定する前にそれを検証するにはどうすればよいですか?ここでValidationAttribute.IsValidが期待どおりに呼び出されないのはなぜですか?

は、バリデータの属性がどのように見えるか確認するためにスケッチコードモデルである:私はあなたが話していると仮定し

[MyAttribute] 
public string MyProperty 
{ 
    get { ... } 
    set { ... } 
} 
+0

プロパティはsetメソッドとgetメソッドに解決されるので、実行するにはsetterを呼び出す必要があります。 –

答えて

1

[AttributeUsage(AttributeTargets.Property, AllowMultiple = false)] 
public class MyAttribute: ValidationAttribute 
{  
    public override bool IsValid(object value) 
    { 
     ... 
    } 
} 
ここ

属性がプロパティで使用されている方法ですDataAnnotations名前空間内のValidationAttributeについてこれらの属性は、特定の規定されたモデルなしで、に一般的にの検証要件を説明するために使用されます。

しかし、多くの場合、それが構築されるオブジェクトまたはオブジェクトのセットのために理にかなっているし、次に尋ねるようにすることへの呼び出しのために、「これは今有効ですか?」 - そのような場合、もちろん、あなたのIsValidメソッドへの呼び出しは、プロパティの値が設定された後にうまくいきます。

属性は、一般的には、受動的である - 何かが実際にプログラム的属性にアクセスし、それを使って何かをするような時間まで、属性内のコードのどれも実行されません。 「この属性がアタッチされているメンバーが呼び出されたときには、まずこのコードを実行する」という属性を記述する一般的な方法はありません。

関連する問題