在asp.net mvc2自定义属性中读取另一个属性的值?

时间:2011-09-04 21:56:00

标签: c# asp.net-mvc-2 properties custom-attributes asp.net-mvc-validation

我在asp.net mvc2项目中制作了自定义属性:

[AttributeUsage(AttributeTargets.Property, AllowMultiple = false, Inherited = false)]
public class IsUsernameValidAttribute : ValidationAttribute
{
    public override bool IsValid(object value)
    {
        if (value == null)
        {
            return true;
        }

        var username = value.ToString();

        return UserBusiness.IsUsernameValid(username) 
// && value of OtherProperty == true;
    }
}

为模型:

public class MyClass
{
    [IsUsernameValid]
    public string UserName { get; set; }

    public bool OtherProperty { get; set; }
}

我可以获得UserName的值,但是我可以在自定义属性中获取OtherProperty的值并在return子句中使用它以及如何使用它。提前谢谢。

1 个答案:

答案 0 :(得分:1)

执行此操作的唯一方法是使用类级别属性。这通常用于在注册期间验证PasswordPasswordConfirmation字段。

抓住一些代码from there作为起点。

[AttributeUsage(AttributeTargets.Class)]
public class MatchAttribute : ValidationAttribute
{
   public override Boolean IsValid(Object value)
   {
        Type objectType = value.GetType();

        PropertyInfo[] properties = objectType.GetProperties();

        ...
   }
}