asp.net-mvc-3 – jQuery.validator.unobtrusive.adapters.addMin
|
我正在使用DataAnnotations创建一个日期范围验证器,jQuery.validate和jquery.validate.unobtrusive.我已经阅读了以下内容:
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));
我也改变了添加适配器的方式,因此我可以添加其他属性.永远不要发送到服务器端开发人员做前端工程师工作;)希望这有助于某人. (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net – 当HTTPContext .Current为Nothing时如何使用Ser
- asp.net-mvc – Asp.net MVC查看测试?
- 获取Uploadify以使用asp.net-mvc
- asp.net-mvc – 使用实体框架4.1创建复合主键
- asp.net-mvc – knockout下拉列表将选择传递给MVC5中的模型
- asp.net – 覆盖webapi odata链接的主机
- asp.net – 如何在Azure网站上设置machineKey
- asp.net – 是否有相当于mod_pagespeed Apache模块的IIS?
- asp.net – 如何通过使用eval应用特定FORMAT的日期?
- asp.net-mvc – 在链接文本中使用HTML元素创建一个ActionLi
- asp.net-mvc – 如何在asp.net mvc中持久化查询字
- asp.net-mvc – 发布重定向到ASP.NET MVC和验证与
- asp.net – 在machine.config中存储连接字符串vs
- asp.net – 如何停止所有cassini实例?
- asp.net-mvc-3 – 具有ASP.NET MVC3和嵌入式Razo
- .net – 有什么简单的方法可以将标准转换为HQL吗
- asp-classic – 如何在asp经典中触发异步调用并忽
- asp.net – 如何在没有实体框架的MVC中使用Simpl
- asp.net-mvc – 我应该在Web应用程序中记录哪些信
- asp.net-core – 为什么我的JWT承载认证在令牌表
