【问题标题】:custom unobtrusive date validators for dates日期的自定义不显眼的日期验证器
【发布时间】:2011-08-26 21:47:20
【问题描述】:

也许这只是我的想法,但我很难理解你应该如何做自定义的不显眼的验证器。 C# 部分很简单,但 jqueryui 适配器是我迷路的地方。

我一直在尝试制作一个验证器,它要求日期是过去一定的时间。我用它来验证年龄,以确保有人输入的日期是过去 18 年。

我最终决定让它成为一个远程验证器,这样验证在客户端和服务器端都使用相同的代码。尽管如此,我还是对 jquery 感兴趣以使其工作。

我希望数据注释扩展具有日期功能。

【问题讨论】:

    标签: c# asp.net-mvc-3 data-annotations unobtrusive-validation custom-validators


    【解决方案1】:

    您可以在Brad Wilson's blog article 中找到很多关于使用 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 plugin 很容易实现

    希望对你有帮助

    【讨论】:

    • 太棒了。我想我正在断开适配器的工作方式以及 jqv 的交互方式。我已经阅读了 Brads 的文章十几次或更多次,但有些东西没有点击。
    猜你喜欢
    • 2011-12-24
    • 1970-01-01
    • 1970-01-01
    • 2012-11-17
    • 2013-02-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-21
    相关资源
    最近更新 更多