JQuery 验证忽略本地化文件 (ASP.NET MVC)

Posted

技术标签:

【中文标题】JQuery 验证忽略本地化文件 (ASP.NET MVC)【英文标题】:JQuery validate ignore localization files (ASP.NET MVC) 【发布时间】:2013-07-01 09:15:08 【问题描述】:

在我的 ASP.NET MVC 应用程序中,我向我的模型添加了验证属性:

public class MyModel

    [Required]
    public string Name  get; set; 
    ...

我还在我的 html 中添加了本地化文件:

<script src="//ajax.aspnetcdn.com/ajax/jquery.validate/1.11.1/localization/messages_de.js"></script>

但是,验证消息仍未翻译,我只看到英文消息。生成的 HTML 如下所示:

<input data-val="true" data-val-required="The Name field is required." id="Name" name="Name" type="text" value="">

如何在不在服务器端创建自己的翻译的情况下使本地化与 ASP.NET MVC 一起工作?我想使用现有的 javascript 本地化。

【问题讨论】:

【参考方案1】:

您在 HTML 中包含的脚本包含 jQuery 验证插件的错误消息。用于修饰模型属性的必需数据注释属性是一个 ASP.NET 验证系统。

虽然数据注释系统确实提供了客户端验证,但它使用的错误消息使用 ASP.NET 的本地化系统附加到服务器上标记中的属性。

假设您可以在 jquery 消息文件中找到可以满足您的目的的错误消息,使用它们的一种方法是使用 DataAnnotation 属性的 ErrorMessage 属性为属性注入消息键,而不是错误消息本身。然后,您可以在视图中添加一个 jQuery 函数,该函数将从无效元素的相关属性(例如 data-val-required)中获取键,以查找并用从消息文件中检索到的字符串替换属性的内容。

所以(大致):

public class MyModel

    [Required(ErrorMessage="messageKey")]
    public string Name  get; set; 
    ...


$(document).ready(function () 
    var elem = $("input[data-val-required]");
    elem.val(function lookupMessage() 
        var key = elem.val();
        var message = dosomethingWith(key); // lookup value
        return message;
    );
);

【讨论】:

以上是关于JQuery 验证忽略本地化文件 (ASP.NET MVC)的主要内容,如果未能解决你的问题,请参考以下文章

使用 asp.net core 删除所需的验证

asp.net mvc jquery 下拉验证

忽略 ASP.net 中的 Javascript、CSS 和图像文件路由

Asp.net MVC的验证

为啥 jQuery 验证函数在 ASP.NET MVC Core 应用程序中不起作用?

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