2012-05-16 18 views
6

他の属性のコード内に属性の存在をテストすることは可能ですか? MyTestAttribute.IsValidはRequiredAttributeをInception.Levelsを持っているかどうかを判断することが可能です...他の属性のコード内からの属性のテスト

public class Inception { 
    [Required] 
    [MyTest] 
    public int Levels { get; set; } 
} 
public class MyTestAttribute : ValidationAttribute { 
    public override bool IsValid(object o){ 
     // return whether the property on which this attribute 
     // is applied also has the RequiredAttribute 
    } 
} 

を使用すると、次のクラス定義を持って言いますか?

+0

いいです!私はないと思っていますが、それはちょうど推測です。 – zmbq

答えて

3

ValidationAttributeの特定のケースでは、コンテキストパラメータを持つもう1つのIsValidオーバーロードを使用する必要があります。コンテキストは、包含する型を取得するために、また属性が適用されるプロパティの名前を取得するために使用できます。

protected override ValidationResult IsValid(object value, 
    ValidationContext validationContext) 
{ 
    var requiredAttribute = validationContext.ObjectType 
    .GetPropery(validationContext.MemberName) 
    .GetCustomAttributes(true).OfType<RequiredAttribute>().SingleOrDefault(); 
} 
関連する問題