ASP.NET MVC Core中flatpickr日期选择器模型验证不生效
问题根因
两个核心问题导致验证失效:
- flatpickr配置项写错:你代码里写的
format不是flatpickr的合法配置项,控制提交到后端值格式的参数是dateFormat,配置错误会导致原始绑定input的取值不符合预期。 - 开启
altInput: true后,flatpickr会自动将你写的绑定了asp-for="txtDate"的原生input设为隐藏状态,再生成一个无name属性的可见input做展示用。ASP.NET Core默认依赖的jQuery客户端验证默认会跳过所有隐藏元素的校验,直接导致客户端验证不触发;同时原生input上的form-control样式不会继承到flatpickr生成的可见输入框上,还会出现样式错乱。
修复步骤
- 修正flatpickr配置,替换错误的配置项,同时给生成的可见输入框补上表单样式
$("#txtDate").flatpickr({ dateFormat: "d-m-Y", // 替换原错误的format配置,该值为实际提交到后端的日期格式 altFormat: "d-M-Y", minDate: new Date(), altInput: true, altInputClass: "form-control" // 给flatpickr生成的可见输入框加上bootstrap表单样式,保持样式统一 });
- 调整jQuery验证的默认忽略规则,避免插件跳过flatpickr关联的隐藏原始输入框。这段代码需要放在jQuery、jquery.validate加载完成之后,flatpickr初始化之前执行:
$.validator.setDefaults({ // 配置验证规则不忽略id为txtDate的隐藏输入框,如果有多个日期控件,可以给对应input加统一class,写成 :hidden:not(.flatpickr-bind) 做通用匹配 ignore: ":hidden:not(#txtDate)" });
- 服务端校验无需额外调整,你当前写在
txtDate属性上的[Required]特性可以正常生效,只要前端值正常提交,空值时服务端会正常触发校验返回错误信息。
修复后可直接测试:不选日期直接提交表单,客户端会正常显示"Enter Start Date"的错误提示,选值后可以正常提交,不会出现验证拦截异常。
内容的提问来源于stack exchange,提问作者Prem Singh
相关产品推荐
相关产品推荐

