0

I have a property annotated with a validation attribute. Why is the setter on the property called before the IsValid method of the attribute, and more importantly how do i get it to validate before setting the value ?

Here is a sketched code model to see how the validator attribute looks like:

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

Here is how the attribute is used on the property:

[MyAttribute]
public string MyProperty
{
   get { ... }
   set { ... }
}
4

1 に答える 1

1

名前空間ValidationAttribute内について話していると思いますか?DataAnnotationsこれらの属性は、特定の規定モデルなしで、一般的に検証要件を記述するために使用されます。

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

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

于 2012-04-27T07:55:46.043 に答える