如何在 ASP NET MVC 中自定义不显眼的验证 JQuery 消息?
Posted
技术标签:
【中文标题】如何在 ASP NET MVC 中自定义不显眼的验证 JQuery 消息?【英文标题】:How can I customize the unobtrusive validation JQuery messages in ASP NET MVC? 【发布时间】:2013-10-22 06:57:11 【问题描述】:我有一个表格,当它进行不显眼的验证时,我希望它显示:
此消息:“请输入一个值。”
代替此消息:“此字段是必需的。”
我尝试在我的 jquery.validate.unobtrusive.js 文件末尾添加它
(function ($)
$.extend($.validator.messages,
required: "Please enter a value."
);
(jQuery));
但它只是不起作用。
我也尝试直接修改 jquery.validate.js 文件中的“消息”变量,但它也不起作用。
您能告诉我如何完成这项工作吗?
【问题讨论】:
如果在您直接在 jquery.validate.js 中修改消息后没有任何变化,则可能意味着您的 Web 浏览器缓存需要重置。或者,如果在 jquery.validate.unobtrusive.js 或 jquery.validate.js 之后调用本地化专用脚本(如 message_xx.js ?):它可以隐藏/覆盖您的自定义更改。 @AirL 我重置了我的网络浏览器,重建我的项目,它一直在做同样的事情。我没有本地化专用脚本。当我检查 Chrome 的开发者控制台时,我可以看到正在使用的文件有我的修改。 -> 我不得不认为 MVC 只是不使用这些消息,它从其他地方加载它。但我不知道在哪里。 查看源代码,这所有的消息都在标记上,所以在初始化期间,如 htmlAttributes 中的 displayFor 或 EditorFor 方法,根据您的消息指定数据属性值.. 【参考方案1】:如果您正在使用数据注释属性并且不想为每个属性自定义消息(您的一个 cmets 似乎就是这种情况),我可以看到两个选项:
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) 验证规则被浏览器缓存,因此您需要清除它们(有关更多信息,请参阅this answer)。并且 2) 一旦页面被渲染,所有的错误消息都在 html 标记中,所以那是你需要更改验证消息的地方。
【讨论】:
【参考方案2】:为什么不在验证属性上使用 ErrorMeesage
[Required(ErrorMessage="Please enter a value.")]
编辑: 来自ThisPost,是另一种做法:
为您的项目创建 App_GlobalResources 文件夹(右键单击项目 -> 添加 -> 添加 ASP.NET 文件夹 -> App_GlobalResources)。 在该文件夹中添加一个 resx 文件。说MyNewResource.resx
。
使用所需的消息格式添加资源键 PropertyValueInvalid
(例如,“内容 0 对字段 1 无效”)。如果你想更改PropertyValueRequired
也添加它。
将代码 DefaultModelBinder.ResourceClassKey = "MyNewResource"
添加到您的 Global.asax 启动代码中。
【讨论】:
因为如果使用“ErrorMessage”,我将需要在我需要的每个字段中执行此操作。相反,如果我可以修改消息,我只需要在一个地方进行。以上是关于如何在 ASP NET MVC 中自定义不显眼的验证 JQuery 消息?的主要内容,如果未能解决你的问题,请参考以下文章
使用 Select2 ASP.NET MVC 时进行不显眼的验证