【发布时间】:2012-03-06 07:15:02
【问题描述】:
创建了一个自定义验证属性,我希望它也能在客户端工作。这是模型类
public class CreditCardAttribute : ValidationAttribute, IClientValidatable
{
public override bool IsValid(object value)
{
var number = Convert.ToString(value);
return IsValidNumber(number);
}
private bool IsValidNumber(string number)
{
int[] DELTAS = new int[] { 0, 1, 2, 3, 4, -4, -3, -2, -1, 0 };
int checksum = 0;
char[] chars = number.ToCharArray();
for (int i = chars.Length - 1; i > -1; i--)
{
int j = ((int)chars[i]) - 48;
checksum += j;
if (((i - chars.Length) % 2) == 0)
checksum += DELTAS[j];
}
return ((checksum % 10) == 0);
}
public IEnumerable<ModelClientValidationRule> GetClientValidationRules(ModelMetadata metadata, ControllerContext context)
{
yield return new ModelClientValidationRule {
ErrorMessage = this.ErrorMessage,
ValidationType = "CreditCard"
};
}
}
jQuery:
jQuery.validator.addMethod('CreditCardtest', function (value, element, params)
{
return false;
});
jQuery.validator.unobtrusive.adapters.add('CreditCard', { }, function(options){
options.rules['CreditCardtest'] = true;
options.messages['CreditCardtest'] = options.message;
});
我不确定应该去 CreditCardTest 什么,我想将我在 Model 中的内容重写到这里吗?
谢谢
【问题讨论】:
-
您真的想用 JavaScript 编写信用卡验证算法吗?并不是说这是一个秘密,但对我来说似乎完全没用。
-
我没有,但我怎样才能让它工作?
-
您在问如何将您的 C# 代码翻译成 javascript?
-
好的,这就是现在发生的事情,我在模型中添加了
IClientValidatable,并且我完全删除了 jquery 代码并且它可以工作。我认为它需要 jQuery 部分才能工作? -
什么有效?如果您删除了 jQuery 代码,您希望发生什么客户端验证?
标签: jquery asp.net-mvc-3 validation