【问题标题】:ASP .NET MVC 3: Modifying validation scripts and Globalizing messagesASP .NET MVC 3:修改验证脚本和全球化消息
【发布时间】:2012-01-26 04:24:23
【问题描述】:

我现在在这里是因为两件事。

第一:

我需要修改一个 jQuery 脚本来修复那个小数分隔符(点或逗号)。在我的国家(阿根廷),我们使用逗号作为小数分隔符,而 jQuery.validation 使用点。 我设法自己更改了 RegEx,现在已修复,但我的问题来自另一方。

每当我添加一个视图时,它都会引用两个脚本

<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>

由于我只直接修改了 jquery.validate.js,我怎样才能将它重构为 min(我不知道它们之间的区别,所以在这一点上加一点水会很棒)。 ¿ 扩展脚本会更好吗?如何? (试过这个LenardG's jQuery validate and the comma decimal separator (MVC) 但没用:( )

我也不知道我是否可以像那样一个一个地改变它,它会继续工作。

第二:

我需要全球化来自 jQuery 客户端验证的消息。

例如,当您在数字字段中输入一个字母(比如说年龄)时,它会显示一条消息“该字段年龄必须是一个数字。”...我一直在疯狂地查找整个解决方案,一遍又一遍地传达那个信息(恕我直言,魔鬼的工作)。但显然,没有成功。

虽然好的做法是根据网络浏览器文化选择文化和那些东西,但我必须做的网络应用程序必须让系统用户成为选择文化的人(可能在登录页面或在用户配置页面中,但这并不重要)。

因此,如果用户选择 es-AR 文化(来自阿根廷的西班牙语),我想显示的消息是“El campo edad debe ser un número。”;如果用户选择 fr-FR 文化,则要显示的消息应该是(感谢 Google 翻译)“Le champ âge doit être un nombre。”


对不起我的英语,我希望你能理解我的“问题”。 谢谢大家;)

【问题讨论】:

    标签: jquery asp.net-mvc-3 globalization


    【解决方案1】:

    请在 jquery.validate 脚本之后添加此代码:

    $(document).ready(function () {
        $.validator.methods.range = function (value, element, param) {
            var globalizedValue = value.replace(",", ".");
            return this.optional(element) || (globalizedValue >= param[0] && 
                   globalizedValue <= param[1]);
        }
        $.validator.methods.number = function (value, element) {
            return this.optional(element) || /^-?(?:\d+|\d{1,3}(?:[\s\.,]\d{3})+)(?:[\.,]\d+)?$/.test(value);
        }
        $.validator.methods.date = function (value, element) {
            var isValid = true;
            if (Object.prototype.toString.call(d) === "[object Date]") {            
                if ( isNaN( d.getTime() ) ) { 
                    isValid = false;
                }            
            }
            else {
                isValid = false;
            }
            return this.optional(element) || isValid;
        }
    });
    

    这会将日期与导航器文化相对应,并使用“,”作为小数分隔符。

    问候。

    【讨论】:

      【解决方案2】:

      我正在为 MVC3 编写一个 contrib 项目,其中包括一种处理消息本地化的更简单方法:http://blog.gauffin.org/2011/09/easy-model-and-validation-localization-in-asp-net-mvc3/

      【讨论】:

      • 它非常简单明了,尽管我更喜欢使用自己创建的简单资源文件并手动更改所有消息。
      【解决方案3】:

      首先,我相信您只需要包含其中一个验证脚本(如果它们只是常规的和缩小的)。

      创建另一个名为 app.domready.js 的 js 文件,这将是您放置常规生产代码的位置。出于更新目的直接编辑插件通常也不好。

      将所有这些放入 app.domready.js 并在您的母版页/视图 _Layout.cshtml 中引用它。

      <script src="@Url.Content("~/Scripts/app.domready.js")"></script>
      

      这将初始化 jquery.validate 插件。

      $(document).ready(
            function () {         
                      $('form').validate({
                      rules: {
                      firstname: "required",
                      lastname: "required",
                      username: {
                          required: true,
                          minlength: 2
                      },
                      password: {
                          required: true,
                          minlength: 5
                      },
                      confirm_password: {
                          required: true,
                          minlength: 5,
                          equalTo: "#password"
                      },
                      email: {
                          required: true,
                          email: true
                      },
                      topic: {
                          required: "#newsletter:checked",
                          minlength: 2
                      },
                      agree: "required"
                  },
                  messages: {
                      firstname: "Please enter your firstname",
                      lastname: "Please enter your lastname",
                      username: {
                          required: "Please enter a username",
                          minlength: "Your username must consist of at least 2 characters"
                      },
                      password: {
                          required: "Please provide a password",
                          minlength: "Your password must be at least 5 characters long"
                      },
                      confirm_password: {
                          required: "Please provide a password",
                          minlength: "Your password must be at least 5 characters long",
                          equalTo: "Please enter the same password as above"
                      },
                      email: "Please enter a valid email address",
                      agree: "Please accept our policy"
                  }
      
          });
      });
      

      您根据表单 ID/类在其中设置参数。 查看http://jquery.bassistance.de/validate/demo/ 的源代码以获取帮助。

      并且 min 或任何名称中带有 .min 的 jquery 插件意味着在浏览器解析时缩小或压缩以节省空白/大小,这意味着您的用户下载更少,这意味着更快。我们通常在开发中使用未压缩的,并在 VS2010 中有一个构建脚本来压缩所有内容。

      希望我能理解你想要做什么。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-06-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多