jquery.validate.unobtrusive.js验证生效不显示提示及修改提示语言如何解决
问题修复方案
一、验证功能正常但不展示警告提示的修复方法
按优先级排查解决:
- 先添加验证提示的默认显示样式,多数情况下是样式缺失导致提示被隐藏:
/* 加入到你的全局样式文件中 */ .field-validation-error { color: #dc3545; display: block !important; } .input-validation-error { border-color: #dc3545; box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.25); }
- 排查下拉框插件的影响:你给下拉框加了
data-live-search属性,说明用了Bootstrap Select这类下拉增强插件,插件会隐藏原生的<select>元素,默认的错误提示会绑定到隐藏的原生select后方,导致不可见。需要自定义错误放置逻辑,在所有验证脚本加载完成后添加以下代码:
$.validator.setDefaults({ errorPlacement: function (error, element) { // 处理下拉框插件的错误提示位置 if (element.attr('data-live-search') === 'true') { error.insertAfter(element.next('.bootstrap-select')); } else { error.insertAfter(element); } } }); // 重新初始化unobtrusive验证 $.validator.unobtrusive.parse('#formLink');
- 检查脚本加载是否重复:确认整个页面没有重复加载jQuery、jquery.validate.js,重复加载会清空之前的验证初始化配置,导致提示无法生成。
- 调整验证汇总配置:如果需要显示所有客户端错误,可以把
asp-validation-summary="ModelOnly"改为asp-validation-summary="All"。
二、修改验证提示信息语言的方法
有两种实现方式:
方式1:使用官方语言包
jquery.validate自带多语言包,在你的jquery-validation/dist/localization目录下找到对应语言的脚本,比如波斯语是messages_fa.js,中文是messages_zh-CN.js,在验证脚本加载完成后引入即可:
<script src="~/lib/jquery/dist/jquery.js"></script> <script src="~/lib/jquery-validation/dist/jquery.validate.js"></script> <!-- 新增语言包引入,放在jquery.validate之后,unobtrusive之前 --> <script src="~/lib/jquery-validation/dist/localization/messages_fa.js"></script> <script src="~/lib/jquery-validation-unobtrusive/jquery.validate.unobtrusive.js"></script>
方式2:自定义全局提示信息
如果要完全自定义提示内容,可以在验证脚本加载完成后全局覆盖默认消息:
// 示例:改为波斯语自定义提示 $.extend($.validator.messages, { required: "این فیلد الزامی است", url: "لطفا آدرس معتبر وارد کنید" // 其他规则的提示可以按需添加 });
也可以直接在后端模型的属性上通过数据注解指定提示,服务端和客户端验证会自动同步:
public class YourModel { [Required(ErrorMessage = "لطفا درس را انتخاب کنید")] public int LessonId { get; set; } [Url(ErrorMessage = "لطفا آدرس معتبر وارد کنید")] public string Url { get; set; } // 其他属性同理 }
内容的提问来源于stack exchange,提问作者user15134192
相关产品推荐
相关产品推荐

