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是一个继承验证属性类的类。 请建议正确的解决方案!谢谢
答案 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();
希望它有效。