自定义ValidationAttribute中的Access Controller上下文

时间:2014-06-19 12:12:20

标签: asp.net-mvc validation asp.net-mvc-4

我正在使用ValidationAttribute实现自定义验证器:

public class CustomAttribute : ValidationAttribute
{
    protected override ValidationResult IsValid (object value, ValidationContext validationContext)
    {
        //...
    }
}

但是要运行验证,我需要访问一个变量,该变量是应用程序基本控制器的一部分(它与当前登录的用户有关)。我怎样才能抓住它?

1 个答案:

答案 0 :(得分:0)

如果您可以使用变量填充模型属性,则可以执行此操作:

型号:

[CustomAttribute("MyVariableAsModelProperty", "Failed Validation!")
public string ValidateThis{get; set;}
public string MyVariableAsModelProperty{get; set;}

您的自定义验证器:

public class CustomAttribute : ValidationAttribute
{
    string otherPropertyName;
    public CustomAttribute(string otherPropertyName, string errorMessage)
                : base(errorMessage)
           {
                this.otherPropertyName = otherPropertyName;
            }
            protected override ValidationResult IsValid (object value, ValidationContext validationContext)
            {
                var otherPropertyInfo = validationContext.ObjectType.GetProperty(this.otherPropertyName);
                var referenceProperty = (string)otherPropertyInfo.GetValue(validationContext.ObjectInstance, null);
                //...
            }

现在您要比较2个值:value是要验证的模型属性,referenceProperty是变量。