ASP .NET MVC 3:修改验证脚本和全局化消息

时间:2012-01-26 04:24:23

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

我现在因为两件事而来到这里。

首先

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

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

<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客户端验证的消息。

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

虽然良好的做法是根据网络浏览器文化选择文化和内容,但我必须做的Web应用程序必须让系统用户成为选择文化的人(可能在登录页面中)或者在用户配置页面中,但这没关系。)

因此,如果用户选择了es-AR文化(来自阿根廷的西班牙语),我想要展示的信息是“El campo edad debe serunnúmero”。如果用户选择了fr-FR文化,那么要显示的消息应该是(感谢Google翻译)“Lechampâgedoitêtreunnombre。”


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

3 个答案:

答案 0 :(得分: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;
    }
});

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

问候。

答案 1 :(得分:0)

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

创建另一个名为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中使用构建脚本来压缩所有内容。

希望我理解你要做的事情。

答案 2 :(得分:0)

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