Asp.net mvc 3 mvc3 jquery不引人注目的验证区域设置十进制字段

Asp.net mvc 3 mvc3 jquery不引人注目的验证区域设置十进制字段,asp.net-mvc-3,unobtrusive-validation,Asp.net Mvc 3,Unobtrusive Validation,我正在使用不引人注目的验证开发本地化的mvc3 web应用程序。 在web.config中,我得到: <globalization culture="pl-PL" uiCulture="pl" /> 以上是解决根本无法识别十进制数的基本问题 但当我尝试在我的model Decimal Price属性上使用RangeAttribute时,它仍然不起作用。 如何解决这个问题?菲尔·哈克发布了一些关于这个问题的信息 在这篇文章中,他描述了以下几点: using System; usin

我正在使用不引人注目的验证开发本地化的mvc3 web应用程序。 在web.config中,我得到:

<globalization culture="pl-PL" uiCulture="pl" />
以上是解决根本无法识别十进制数的基本问题

但当我尝试在我的model Decimal Price属性上使用RangeAttribute时,它仍然不起作用。
如何解决这个问题?

菲尔·哈克发布了一些关于这个问题的信息

在这篇文章中,他描述了以下几点:

using System;
using System.Globalization;
using System.Web.Mvc;

public class DecimalModelBinder : IModelBinder {
    public object BindModel(ControllerContext controllerContext, 
    ModelBindingContext bindingContext) {
    ValueProviderResult valueResult = bindingContext.ValueProvider
        .GetValue(bindingContext.ModelName);
    ModelState modelState = new ModelState { Value = valueResult };
    object actualValue = null;
    try {
        actualValue = Convert.ToDecimal(valueResult.AttemptedValue, 
            CultureInfo.CurrentCulture);
    }
    catch (FormatException e) {
        modelState.Errors.Add(e);
    }

    bindingContext.ModelState.Add(bindingContext.ModelName, modelState);
    return actualValue;
    }
}
然后在Global.asax中

ModelBinders.Binders.Add(typeof(decimal), new DecimalModelBinder());
我不确定这是否也解决了客户机上的问题(Phil似乎表示它会工作),但至少应该解决服务器端的问题。

如果您设置

key="UnobtrusiveJavaScriptEnabled" value="false"
上一个答案中发布的
DecimalModelBinder
将起作用,但您正在禁用客户端验证

要解决您的问题,您需要输入正确的jQuery语言环境。 看一看,否则他们应该在实施过程中给你一些帮助

您应该添加Jquery.globalize插件表单NuGet,然后在DOMready函数中添加类似的内容,以便正确验证数字(至少对我来说是这样的)

然后在页面中添加相关脚本

<script src="@Url.Content("~/Scripts/jquery-1.7.min.js")" type="text/javascript"></script>
<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>
<script src="@Url.Content("~/Scripts/jquery.globalize/globalize.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.globalize/cultures/globalize.culture.fr-FR.js")" type="text/javascript"></script>


如果客户端与服务器端具有不同的区域性,那么即使使用此代码,您也会遇到问题i在web.config中设置区域性和uiCulture,如thie:-这将服务器端和客户端区域性都设置正确?上面的DecimalModelBinder对我来说很好。有没有线索说明valueResult.Culture.NativeName中为什么是“不变语言(不变国家)”?这可能是我问题的根源。如果DefaultModelBinder没有使用我的pl区域性,那么它将无法工作。如何为DefaultModelBinder设置正确的区域性?请参见此处的答案。你可能会找到你的解决方案!
 $.validator.methods.number = function (value, element) {
        if (Globalize.parseFloat(value)) 
            return true;
        return false;
    }
 Globalize.culture('fr-FR');
<script src="@Url.Content("~/Scripts/jquery-1.7.min.js")" type="text/javascript"></script>
<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>
<script src="@Url.Content("~/Scripts/jquery.globalize/globalize.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.globalize/cultures/globalize.culture.fr-FR.js")" type="text/javascript"></script>