我有一个表单,当它进行不显眼的验证时,我希望它显示:
此消息:“请输入一个值。”
而不是此消息:“此字段为必填项。”
我尝试将其添加到 jquery.validate.unobtrusive.js 文件的末尾
(function ($) {
$.extend($.validator.messages, {
required: "Please enter a value."
});
}(jQuery));
但它就是不起作用。
我还尝试直接修改 jquery.validate.js 文件中的“messages”变量,但它也不起作用。
你能告诉我如何完成这个任务吗?
如果您正在使用数据注释属性并且不想为每个属性自定义消息(您的评论之一表明情况就是如此),我可以看到两个选项:
1) 创建您自己的数据注释属性并设置默认消息,并将
[Required]
的所有实例更改为您的新属性。
2)你可以在 jQuery 中尝试一下:
// reset the form's validator
$("form").removeData("validator");
// change the text on each required attribute
$(":input[data-val-required]").attr("data-val-required", "Please enter a value");
// reapply the form's validator
$.validator.unobtrusive.parse(document);
我在 Chrome 的控制台中尝试了这个 javascript,一切似乎都工作正常。您需要这样做的原因是因为 1) 验证规则由浏览器缓存,因此您需要将其清除(有关更多信息,请参阅这个答案)。 2) 页面渲染后,所有错误消息都在 html 标记中,因此这就是您需要更改验证消息。
为什么不在验证属性上使用 ErrorMeesage
[Required(ErrorMessage="Please enter a value.")]
编辑: 来自ThisPost,这是另一种方法:
MyNewResource.resx
。PropertyValueInvalid
(例如“内容 {0} 对于字段 {1} 无效”)。如果您也想更改PropertyValueRequired
,请添加它。DefaultModelBinder.ResourceClassKey = "MyNewResource"
添加到 Global.asax 启动代码中。为了避免必须重置验证器并进行另一次完整解析,您可以在管道中尽早设置属性,使其在初始验证器解析之前发生:
document.addEventListener("readystatechange", function () {
if (document.readyState === 'interactive')
{
const requiredVals = Array.from(document.querySelectorAll("[data-val-required]"));
for (let i = 0; i < requiredVals.length; i++) {
requiredVals[i].setAttribute("data-val-required", "Please enter a value");
}
}
}, false);