也许这只是我的思维方式,但我很难理解你应该如何做自定义的不显眼的验证器。C# 部分很简单,但 jqueryui 适配器是我迷路的地方。
我一直在尝试制作一个验证器,它要求日期是过去一定的时间。我用它来验证年龄,以确保有人输入了过去 18 年的日期。
我最终决定让它成为一个远程验证器,这样验证在客户端和服务器端都使用相同的代码。尽管如此,我还是对 jquery 感兴趣以使其工作。
我希望数据注释扩展具有日期功能。
也许这只是我的思维方式,但我很难理解你应该如何做自定义的不显眼的验证器。C# 部分很简单,但 jqueryui 适配器是我迷路的地方。
我一直在尝试制作一个验证器,它要求日期是过去一定的时间。我用它来验证年龄,以确保有人输入了过去 18 年的日期。
我最终决定让它成为一个远程验证器,这样验证在客户端和服务器端都使用相同的代码。尽管如此,我还是对 jquery 感兴趣以使其工作。
我希望数据注释扩展具有日期功能。
您可以在Brad Wilson 的博客文章中找到很多关于使用 asp.net mvc 进行非侵入式验证的信息,包括创建自定义验证器。
基于以下html(应该是TextBox helper的输出)
<input type="text" name="Age"
data-val="true"
data-val-required="This field is required"
data-val-minage="You should be 18 years or older, go get your parents!"
data-val-minage-value="18" />
<input type="submit"/>
您可以添加以下 javascript 以在客户端验证内容:
// Extend date with age calculator
Date.prototype.age = function (at) {
var value = new Date(this.getTime());
var age = at.getFullYear() - value.getFullYear();
value = value.setFullYear(at.getFullYear());
if (at < value) --age;
return age;
};
// Add adapter for minimum age validator. Wrap in closure
(function ($) {
$.validator.unobtrusive.adapters.addSingleVal("minage", "value");
} (jQuery));
// Add client side minimum age validator
$.validator.methods.minage = function (value, element, params) {
// If no value is specified, don't validate
if (value.length == 0) {
return true;
}
var dob = new Date(Date.parse(value));
if (dob.age(new Date()) < params || dob == 'Invalid Date') {
return false;
}
return true;
};
年龄计算器的学分归功于戴夫
这里缺少的一件事是全球化,但我认为它超出了问题的范围。顺便说一句,使用jquery Globalize 插件很容易实现
希望这可以帮助