我在使用全球化验证十进制字段时遇到了困难。
我需要将我的值以法语格式表示(小数点为逗号,没有千位分隔符)。
编辑:根据这个好的解决方案进行了更新。
所以,这是我的模型:
public class CompanyTaxHistoryModel
{
[Required]
public DateTime DateFrom { get; set; }
[Required]
public DateTime DateTo { get; set; }
[Required]
[Range(0, 100, ErrorMessage = "The percentage must be between 0 and 100")]
[DisplayFormat(DataFormatString = "{0:N} %")]
[Display(Name = "Company Tax")]
public decimal CompanyTaxPercent { get; set; }
}
以下是我的web.config文件:
<globalization requestEncoding="UTF-8" responseEncoding="UTF-8" culture="auto" uiCulture="auto" />
我已经添加了一个名为“localizationHelper”的内容如下:
namespace xxxx.Helpers
{
public static class LocalizationHelpers
{
public static IHtmlString MetaAcceptLanguage<t>(this HtmlHelper<t> html)
{
var acceptLanguage = HttpUtility.HtmlAttributeEncode(System.Threading.Thread.CurrentThread.CurrentUICulture.ToString());
return new HtmlString(String.Format("<meta name=\"accept-language\" content=\" {0}\">",acceptLanguage));
}
}
}
我在我的_Layout.cshtml中使用:
@using xxxx.Helpers
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
@Html.MetaAcceptLanguage()
我已将Globalize.js和所需的语言环境添加到我的项目中,并将以下内容添加到我的脚本中:
$(document).ready(function () {
var data = $("meta[name='accept-language']").attr("content")
Globalize.culture(data);
});
$.validator.methods.date = function (value, element) {
return Globalize.parseDate(value);
};
$.validator.methods.range = function (value, element, param) {
return this.optional(element) || (Globalize.parseFloat(value) >= param[0] && Globalize.parseFloat(value) <= param[1]);
}
$.validator.methods.number = function (value, element) {
return !isNaN(Globalize.parseFloat(value));
}
一切似乎都正常工作,但我遇到了一个问题,即小数值的“.”按钮应该根据本地文化("."或",")呈现适当的值。
例如,我的浏览器设置为fr-FR,如果我只使用数字键盘输入“12,5”,则会得到“12.5”,因此我会收到验证错误。
在这种情况下,数字键盘上的“.”按钮应被理解为逗号。
有什么想法,我错过了什么吗?