为日期自定义不显眼的日期验证器

本文关键字:日期 验证 不显眼 自定义 | 更新日期: 2023-09-27 18:06:41

也许这就是我的思维方式,但是我很难理解应该如何做自定义的不显眼的验证器。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;
    };

年龄计算器的积分归功于Dave

这里缺少的一件事是全球化,但我认为这超出了问题的范围。非常容易实现使用jquery Globalize插件

希望能有所帮助