mvc3 jquery unobtrusive验证语言环境十进制字段

mb6*_*666 6 unobtrusive-validation asp.net-mvc-3

我正在使用不显眼的验证来处理本地化的mvc3 Web应用程序.在web.config中我得到了:

<globalization culture="pl-PL" uiCulture="pl" />
Run Code Online (Sandbox Code Playgroud)

Jquery 1.4.4和jquery验证1.6正在使用中.

问题是十进制数字分隔符.

我可以看到jquery验证忽略了文化,并期望点字符始终是小数分隔符.我需要使用逗号代替.我认为例如德语也是如此.

我创建了自己的methods_pl.js文件:

jQuery.extend(jQuery.validator.methods, {
number: function(value, element) {
    return this.optional(element) || /^-?(?:\d+|\d{1,3}(?:\.\d{3})+)(?:,\d+)?$/.test(value);
}
});
Run Code Online (Sandbox Code Playgroud)

以上是解决十进制数根本无法识别的基本问题.

但是当我尝试在我的模型Decimal Price属性上使用RangeAttribute时,它仍然不起作用.怎么解决这个?

Khe*_*pri 1

Phil Haack 发布了有关此问题的一些信息。

看这里。

在帖子中,他描述了执行以下操作:

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;
    }
}
Run Code Online (Sandbox Code Playgroud)

然后在 Global.asax 中

ModelBinders.Binders.Add(typeof(decimal), new DecimalModelBinder());
Run Code Online (Sandbox Code Playgroud)

我不确定这是否也能解决客户端上的问题(菲尔似乎表明它会起作用),但它至少应该解决服务器端的问题。