asp.net中的自定义注释不起作用?

时间:2017-05-05 09:06:45

标签: asp.net .net asp.net-mvc annotations data-annotations

public class CheckCreditNumberAttribute : ValidationAttribute
{
    public CheckCreditNumberAttribute()
    : base("Not a valid Account Number.")
      {}
    protected override ValidationResult IsValid(object value, ValidationContext validationContext)
    {
     if(value!=null)
        {
            string input = value.ToString();
            int i;
            int sum = 0;
            int count = 1;
            for(i=input.Length-1;i>=0;i--)
            {
                if(count%2!=0)
                {
                    sum += i;
                }
                else
                {
                    int newNum = i * 2;
                    if(newNum>9)
                    {
                        newNum -= 9;
                    }
                    sum += newNum;
                }
                count++;
            }
            if(sum%10==0)
            {
                return ValidationResult.Success;

            }
            else
            {
                var errorMessage = FormatErrorMessage(validationContext.DisplayName);
                return new ValidationResult(errorMessage);
            }

        }
        return ValidationResult.Success;
    }
} }

上面是自定义注释类。

这是在一个模型类中。这个Annotation在运行时不起作用。

[Required(ErrorMessage = "Account Number is Required")]
[CheckCreditNumber(ErrorMessage = "Not a valid Account Number.")]
[Display(Name = "Bank Account Number")]
[RegularExpression(@"\d{14,16}",ErrorMessage ="Account number should be of 14-16 digits.")]
public string BankAccountNumber { get; set; }

这里CheckCreditNumber是一个继承验证属性类的类。 请建议正确的解决方案!谢谢

1 个答案:

答案 0 :(得分:0)

好的,继续在动作方法DonateGroup()中使用Model类名。

然后尝试为您的属性创建Adapter类,如下所示:

public class CheckCreditNumberAttributeAdapter : System.Web.Mvc.DataAnnotationsModelValidator<CheckCreditNumberAttribute>
{
    public CheckCreditNumberAttributeAdapter(System.Web.Mvc.ModelMetadata metadata, ControllerContext context,CheckCreditNumberAttribute attribute)
        : base(metadata, context, attribute)
    {


    }

    public static void SelfRegister()
    {
        System.Web.Mvc.DataAnnotationsModelValidatorProvider
            .RegisterAdapter(
                typeof(CheckCreditNumberAttribute),
                typeof(CheckCreditNumberAttributeAdapter));
    }        
}

然后在Global.asax.cs Application_Start函数

中注册
CheckCreditNumberAttributeAdapter.SelfRegister();

希望它有效。