MVC 3 jQuery验证/全局化数字/十进制字段

des*_*.dk 66 globalization validation jquery culture asp.net-mvc-3

在Web.config文件中使用全球化culture ="da-DK"时,jQuery验证不起作用.

在丹麦,当我们为产品写价格时,我们使用符号19,95而不是美国19.95的方式,这给了我一个问题,我无法解决.

我已经启动了VS2010,新的MVC 3项目,添加了一个homeController,一个Product类和一个简单的标准编辑视图,错误已经存在.

产品类别:

public class Product
{
    public string name { get; set; }
    public string itemNo { get; set; }
    public decimal price { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

HomeController的:

public class homeController : Controller
{
    public ActionResult Index()
    {
        var product1 = new Product { name = "Testproduct", itemNo = "PRD-151541", price = 19 };
        return View(product1);
    }
}
Run Code Online (Sandbox Code Playgroud)

索引视图:

@model WebUI.DomainModel.Product

<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>

@using (Html.BeginForm()) {
    @Html.ValidationSummary(true)
    <fieldset>
        <legend>Product</legend>

        <div class="editor-label">
            @Html.LabelFor(model => model.name)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.name)
            @Html.ValidationMessageFor(model => model.name)
        </div>

        <div class="editor-label">
            @Html.LabelFor(model => model.itemNo)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.itemNo)
            @Html.ValidationMessageFor(model => model.itemNo)
        </div>

        <div class="editor-label">
            @Html.LabelFor(model => model.price)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.price)
            @Html.ValidationMessageFor(model => model.price)
        </div>

        <p>
            <input type="submit" value="Save" />
        </p>
    </fieldset>
}
Run Code Online (Sandbox Code Playgroud)

结果:

很遗憾,我无法在此处提交图片 - 因此请点击此链接查看结果:http: //www.designvision.dk/temp/mvc3_razor_validation_error.gif

因此 - 在运行网站时,该字段将设置为19,00 - 这是正确的文化定义 - 但在尝试保存时,验证失败.

请帮忙...

Dar*_*rov 57

您可以尝试Microsoft 的jQuery Globalization插件:

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

<script src="@Url.Content("~/Scripts/jquery.glob.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/globinfo/jquery.glob.da-dk.js")" type="text/javascript"></script>
<script type="text/javascript">
    $.validator.methods.number = function (value, element) {
        return !isNaN($.parseFloat(value));
    }

    $(function () {
        $.preferCulture('da-DK');
    });
</script>
Run Code Online (Sandbox Code Playgroud)

插件已重命名并移动,您应该使用Globalize(2012年3月)

<script src="@Url.Content("~/Scripts/jquery.globalize/globalize.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.globalize/cultures/globalize.culture.da-DK.js")" type="text/javascript"></script>
<script type="text/javascript">
    $.validator.methods.number = function (value, element) {
        return !isNaN(Globalize.parseFloat(value));
    }

    $(document).ready(function () {
        Globalize.culture('da-DK');
    });
</script>
Run Code Online (Sandbox Code Playgroud)

关于Scott Hanselman博客文章的更多相关信息


  • 更好的代码来支持可选元素`$ .validator.methods.number = function(value,element){return this.optional(element)|| !isNaN(Globalize.parseFloat(值)); } $(function(){Globalize.culture('%% culture %%');});` (6认同)
  • 过时的,或者至少不适合我.请参阅shatl的答案以获取最新版本(适合我). (3认同)

sha*_*atl 23

当前版本的https://github.com/jquery/globalize的更新脚本,并提供可选元素支持

$.validator.methods.number = function (value, element) {
   return this.optional(element) || !isNaN(Globalize.parseFloat(value));
}

$(function () {
    Globalize.culture('%%culture%%');
});
Run Code Online (Sandbox Code Playgroud)


Ric*_*SFT 14

@shatl截至今天有正确的答案.注意范围属性,您需要下面显示的hack.要添加的完整代码如下所示:

@section Scripts {
    @Scripts.Render("~/bundles/jqueryval")
    <script type="text/javascript" src="~/Scripts/globalize.js"></script>
    <script type="text/javascript" src="~/Scripts/globalize.culture.fr-FR.js"></script>
    <script type="text/javascript">
        $.validator.methods.number = function (value, element) {
            return this.optional(element) ||
                !isNaN(Globalize.parseFloat(value));
        }
        $(document).ready(function () {
            Globalize.culture('fr-FR');
        });

        jQuery.extend(jQuery.validator.methods, {    
            range: function (value, element, param) {        
                //Use the Globalization plugin to parse the value        
                var val = $.global.parseFloat(value);
                return this.optional(element) || (
                    val >= param[0] && val <= param[1]);
            }
        });
    </script>
}
Run Code Online (Sandbox Code Playgroud)