微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

asp.net-mvc-3 – jQuery.validator.unobtrusive.adapters.addMinMax往返,在MVC3中不起作用

我正在使用DataAnnotations创建一个日期范围验证器,jQuery.validate和jquery.validate.unobtrusive.我已经阅读了以下内容
http://bradwilson.typepad.com/blog/2010/10/mvc3-unobtrusive-validation.html

http://weblogs.asp.net/mikaelsoderstrom/archive/2010/10/06/unobtrusive-validation-in-asp-net-mvc-3.aspx

和其他但不能发布(noob)

以及SO上的大部分帖子.我正在把头靠在墙上,任何帮助都可以用啤酒/食物/代码/等奖励;)无论如何,这里是代码

我有一个带有以下参数的模型对象:

[display(Name = "Start date"),DayRange(0,5,ErrorMessage = "The Start Date must be between today and 5 days time.")]
public DateTime StartDate { get; set; }

DayRange是一个自定义属性类:

[AttributeUsage(AttributeTargets.Field | AttributeTargets.Property,AllowMultiple = false,Inherited = true)]
public class DayRangeAttribute : RangeAttribute,IClientValidatable
{
    private int _minimumDays;
    private int _maximumDays;

    public DayRangeAttribute(int minimumDays,int maximumDays) : base(minimumDays,maximumDays) 
    {
        _minimumDays = minimumDays;
        _maximumDays = maximumDays;
    }

    public override bool IsValid(object value)
    {
        var datetoBeTested = value as DateTime?;
        return datetoBeTested.HasValue && datetoBeTested.Value >= DateTime.Today.AddDays(_minimumDays) && datetoBeTested.Value <= DateTime.Today.AddDays(_maximumDays);
    }

    public IEnumerable<ModelClientValidationRule> GetClientValidationRules(ModelMetadata Metadata,ControllerContext context)
    {
        var rule = new ModelClientValidationRule
                         {
                             ErrorMessage = this.ErrorMessage,ValidationType = "dayrange"
                         };
        rule.ValidationParameters.Add("min",_minimumDays);
        rule.ValidationParameters.Add("max",_maximumDays);
        yield return rule;
    }
}

我在web.config中有以下内容

<appSettings>
    <add key="ClientValidationEnabled" value="true"/>
    <add key="UnobtrusiveJavaScriptEnabled" value="true"/>
</appSettings>

在文档准备好之前,我已经有了以下JS触发器(在doc准备就绪时尝试触发它):

jQuery.validator.addMethod('dayrange',function (value,element,param) {
    if (!value) return false;
    var Now = Date();
    var dateValue = Date.parse(value);
    var minDate = Now.setDate(Now.getDate() - param.min);
    var maxDate = Now.setDate(Now.getDate() + param.max);

    return this.optional(element) && dateValue >= minDate && dateValue <= maxDate;
},'Must fall in range');

jQuery.validator.unobtrusive.adapters.addMinMax('dayrange','minlength','maxlength','dayrange');

我究竟做错了什么?先谢谢你,约尔

解决方法

解决了!我忘了/不明白你必须将jQuery本身传递给函数闭包.因此,客户端上的自定义验证器应如下所示:
$(function () {
    jQuery.validator.addMethod('dayRange',param) {
        if (!value) return false;
        var valueDateParts = value.split(param.seperator);
        var minDate = new Date();
        var maxDate = new Date();
        var Now = new Date();
        var dateValue = new Date(valueDateParts[2],(valueDateParts[1] - 1),valueDateParts[0],Now.getHours(),Now.getMinutes(),(Now.getSeconds()+5));

        minDate.setDate(minDate.getDate() - parseInt(param.min));
        maxDate.setDate(maxDate.getDate() + parseInt(param.max));

    return dateValue >= minDate && dateValue <= maxDate;
});

    jQuery.validator.unobtrusive.adapters.add('dayrange',['min','max','dateseperator'],function (options) {
        var params = {
            min: options.params.min,max: options.params.max,seperator: options.params.dateseperator
        };

        options.rules['dayRange'] = params;
        if (options.message) {
            options.messages['dayRange'] = options.message;
        }
    });
}(jQuery));

我也改变了添加适配器的方式,因此我可以添加其他属性.永远不要发送到服务器端开发人员做前端工程师工作;)希望这有助于某人.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


这篇文章主要讲解了“WPF如何实现带筛选功能的DataGrid”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“WPF...
本篇内容介绍了“基于WPF如何实现3D画廊动画效果”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这...
Some samples are below for ASP.Net web form controls:(from http://www.visualize.uk.com/resources/asp
问题描述: 对于未定义为 System.String 的列,唯一有效的值是(引发异常)。 For columns not defined as System.String, the only vali
最近用到了CalendarExtender,结果不知道为什么发生了错位,如图在Google和百度上找了很久,中文的文章里面似乎只提到了如何本地化(就是显示中文的月份)以及怎么解决被下拉框挡住的问题,谈
ASP.NET 2.0 page lifecyle ASP.NET 2.0 event sequence changed a lot since 1.1. Here is the order: App
静态声明: &#39; Style=&quot;position: relative&quot; AppendDataBoundItems=&quot;True&quot;&gt; (无 或 空 或
以下内容是从网络上搜集资料,然后整理而来的。不当之处,请不吝指教。(The following were from network, and edited by myself. Thanks in a
Imports System Imports System.Reflection Namespace DotNetNuke &#39;*********************************
Ok so you have all seen them: “8 million tools for web development”, “5 gagillion tools that if you