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时,它仍然不起作用.怎么解决这个?
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)
我不确定这是否也能解决客户端上的问题(菲尔似乎表明它会起作用),但它至少应该解决服务器端的问题。
| 归档时间: |
|
| 查看次数: |
8121 次 |
| 最近记录: |