JQuery Validation验证失败时为何清空无关下拉列表值?
问题原因分析
这种客户端验证失败后下拉列表选项丢失的情况,通常由以下几种原因导致:
1. 模型属性可空性配置问题
你提到下拉列表未标记[Required],但生成的HTML里出现了aria-required="true",这说明ASP.NET Core的Tag Helper默认将该字段识别为必填项。大概率是你的模型中CoachingModelId是非可空值类型(比如int),而非可空类型(int?)。
对于非可空值类型,即使没有手动添加[Required]属性,框架会自动将其视为必填项,Unobtrusive Validation会据此生成客户端验证规则。当表单验证失败时,部分客户端逻辑可能错误地重置了下拉列表的选项。
2. 自定义验证脚本的误操作
如果你的页面中添加了自定义的客户端验证回调(比如绑定了invalid、validate等事件的处理函数),可能在处理必填字段的验证错误时,不小心修改了下拉列表的DOM结构——比如调用empty()之类的方法清空了选项。
3. 验证库版本不兼容
ASP.NET Core 7对JQuery Validation和Unobtrusive Validation的版本有特定要求,如果使用的版本不匹配(比如JQuery Validation版本过高或过低),可能触发客户端验证逻辑的BUG,导致表单元素的DOM被意外修改。
4. 其他DOM操作冲突
如果页面中存在其他异步操作(比如定时加载数据的脚本、其他表单的AJAX提交逻辑),可能在验证失败的同时,这些脚本意外修改了当前表单的下拉列表元素。
内容的提问来源于stack exchange,提问作者nick_b
相关产品推荐
相关产品推荐

