ASP.NET Core中data-val-date日期验证失效问题求助
解决日期格式自定义提示不生效的问题
1. 修正HTML属性命名错误
你输入框里把data-val-date写成了data_val_date(下划线替代连字符),ASP.NET非侵入式验证仅识别data-val-*格式的属性,这是导致提示不生效的直接原因。修改后的输入框代码:
<input id="datDebt" type="text" class="form-control datepicker valid" data-val="true" data-val-required="BD-Le champ Du est obligatoire." data-val-date="BD-Le format du champ Du doit être AAAA-MM-JJ." name="Client.DatDebutClint" value="" aria-autocomplete="none" placeholder="AAAA-MM-JJ" style="min-width: 7em;" maxlength="10" aria-describedby="datDebt-error" aria-invalid="false">
2. 完善模型验证配置
仅添加[DataType(DataType.DateTime)]不足以确保客户端验证的格式规则生效,建议补充[DisplayFormat]属性明确日期格式,并开启编辑模式下的格式应用:
[DisplayName("Du")] [DataType(DataType.Date)] [DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)] public DateTime? DatDebutClint { get; set; } = null;
若需要强制验证格式,还可添加[RegularExpression]属性:
[RegularExpression(@"^\d{4}-\d{2}-\d{2}$", ErrorMessage = "BD-Le format du champ Du doit être AAAA-MM-JJ.")]
3. 确保客户端验证脚本完整
除jquery.validation.js外,必须引入jquery.validate.unobtrusive.js——ASP.NET的非侵入式验证依赖该脚本将data-val-*属性转换为jQuery Validation的验证规则。
4. 适配自定义日期格式验证(可选)
jQuery Validation默认的date验证规则依赖浏览器日期解析逻辑,可能无法严格匹配AAAA-MM-JJ格式。若要强制验证格式,可添加自定义验证方法:
// 自定义日期格式验证方法 $.validator.addMethod("frenchdate", function(value, element) { return this.optional(element) || /^\d{4}-\d{2}-\d{2}$/.test(value); }, "BD-Le format du champ Du doit être AAAA-MM-JJ."); // 映射到非侵入式验证属性 $.validator.unobtrusive.adapters.addSingleVal("frenchdate");
之后修改输入框的验证属性为data-val-frenchdate="true"即可。
内容的提问来源于stack exchange,提问作者Stephane Belzile
相关产品推荐
相关产品推荐

