如何在 ASP NET MVC 中自定义不显眼的验证 JQuery 消息?

问题描述 投票:0回答:3

我有一个表单,当它进行不显眼的验证时,我希望它显示:

此消息:“请输入一个值。

而不是此消息:“此字段为必填项。”

我尝试将其添加到 jquery.validate.unobtrusive.js 文件的末尾

(function ($) {
   $.extend($.validator.messages, {
     required: "Please enter a value."
   }); 
}(jQuery));

但它就是不起作用。

我还尝试直接修改 jquery.validate.js 文件中的“messages”变量,但它也不起作用。

你能告诉我如何完成这个任务吗?

jquery asp.net-mvc validation unobtrusive-validation
3个回答
13
投票

如果您正在使用数据注释属性并且不想为每个属性自定义消息(您的评论之一表明情况就是如此),我可以看到两个选项:

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 标记中,因此这就是您需要更改验证消息。


7
投票

为什么不在验证属性上使用 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 启动代码中。

0
投票

为了避免必须重置验证器并进行另一次完整解析,您可以在管道中尽早设置属性,使其在初始验证器解析之前发生:

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);
© www.soinside.com 2019 - 2024. All rights reserved.