jquery - MVC 3 ASP .NET 客户端验证不起作用
问题描述
我有以下自定义验证:
public class DateGreaterThanAttribute : ValidationAttribute, IClientValidatable
{
private string DateToCompareFieldName { get; set; }
public DateGreaterThanAttribute(string dateToCompareFieldName)
{
DateToCompareFieldName = dateToCompareFieldName;
}
protected override ValidationResult IsValid(object value, ValidationContext validationContext)
{
if (value == null) return new ValidationResult("Not valid");
DateTime laterDate = (DateTime)value;
DateTime earlierDate = (DateTime)validationContext.ObjectType.GetProperty(DateToCompareFieldName).GetValue(validationContext.ObjectInstance, null);
if (laterDate >= earlierDate)
{
return ValidationResult.Success;
}
else
{
return new ValidationResult(string.Format("LOA From must be less than LOA To", DateToCompareFieldName));
}
}
//esse método retorna as validações que serão utilizadas no lado cliente
public IEnumerable<ModelClientValidationRule> GetClientValidationRules(ModelMetadata metadata, ControllerContext context)
{
var clientValidationRule = new ModelClientValidationRule()
{
ErrorMessage = string.Format("LOA From must be less than LOA To", DateToCompareFieldName),
ValidationType = "dategreaterthan"
};
clientValidationRule.ValidationParameters.Add("datetocomparefieldname", DateToCompareFieldName);
return new[] { clientValidationRule };
}
}
我有以下领域:
[DateGreaterThanAttribute("ReferralStart")]
[MappingField("ReferralEnd", IgnoreIfNull = true)]
[Required]
[Display(Name = "LOA Date To")]
public System.DateTime? ReferralEnd {
get {
return this._referralEnd;
}
set {
this._referralEnd = value;
}
}
在客户端,我在单独的 customValidations.js 文件中添加了以下内容。
(function ($) {
$.validator.addMethod("dategreaterthan", function (value, element, params) {
if (!this.optional(element)) {
var otherProp = $('#' + params)
return (otherProp.val() != value);
}
return true;
});
$.validator.unobtrusive.adapters.addSingleVal("dategreaterthan", "datetocomparefieldname");
}(jQuery));
当我检查 html 时,我可以看到我的注释的 data-val 已添加:
<input autocomplete="off" class="form-control limit-width text-box single-line hasDatepicker" data-val="true" data-val-date="The field LOA Date To must be a date." data-val-dategreaterthan="LOA From must be less than LOA To" data-val-dategreaterthan-datetocomparefieldname="ReferralStart" data-val-required="The LOA Date To field is required." id="ReferralEnd" name="ReferralEnd" type="datetime" value="">
并将其添加到捆绑配置中:
bundles.Add(new ScriptBundle("~/bundles/jqueryval").Include(
"~/Scripts/customValidation.js",
"~/Scripts/jquery.validate*"));
但是验证不是在客户端完成的,而是在服务器端运行良好。
我做错了什么?
解决方案
推荐阅读
- postgresql - 升级 Postgres Aurora 主要版本
- npm-scripts - 将文件名作为命令行参数动态传递给我的 NPM 脚本
- git - 在 GitKraken 5.0.4 上推送分支和标签失败,但在 cmd 中有效
- julia - Julia 预分配数组与 MATLAB 预分配数组
- c# - 使用 Xamarin.Forms 在 Android Webview 中显示在线 PDF
- python-3.4 - python脚本不止一个函数
- mysql - 当有两个 Fk;s 并且其中任何一个始终为空时该怎么办?
- html - 如何防止用户在带有类型编号的html文本字段中输入阿拉伯数字
- javascript - 变量随时间变化的竞争条件
- python - 如何检查列表中的元素是否来自给定元素之后