我有一个带有此货币字段的ASP.NET MVC-4应用程序:
[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:c}", ConvertEmptyStringToNull = true)]
[DataType(DataType.Currency)]
public decimal? Price { get; set; }
这是我认为的相应部分:
@Html.EditorFor(model => model.Price)
@Html.ValidationMessageFor(model => model.Price)
如果价格为100欧元,则视图中的文本字段显示:
100,00€
这很好。
但是一旦我尝试回发,我就遇到了问题。验证器会弹出并说价格字段需要是一个数字。
我只能解决这个问题:(1)我删除€符号和(2)替换小数点分隔符(用点替换逗号)。
如果没有更好的解决方案,我想我可以更改DataFormatString =“{0:F2}”以避免货币符号。
但是如何让验证器接受逗号作为小数分隔符而不是(美国)点呢?
感谢您的帮助,伙计们!
答案 0 :(得分:1)
所以,我能够通过http://github.com/jquery/globalize的jQuery全球化插件解决我的问题。
我将以下文件添加到 / scripts 文件夹中:
在 BundleConfig.cs :
bundles.Add(new ScriptBundle("~/bundles/scripts/globalization").Include(
"~/Scripts/globalize*",
"~/Scripts/cultures/globalize*"));
在 _Layout.cshtml :
中@Scripts.Render("~/bundles/scripts/globalization")
并在 _Layout.cshtml :
的脚本部分中$.validator.methods.number = function (value, element) {
return this.optional(element) || !isNaN(Globalize.parseFloat(value));
}
$.validator.methods.range = function (value, element, param) {
return this.optional(element) || (Globalize.parseFloat(value) >= param[0] && Globalize.parseFloat(value) <= param[1]);
}
但是,我无法使货币符号与客户端验证一起使用,因此我还更改了数据注释,如下所示:
[DisplayFormat(ApplyFormatInEditMode = false, DataFormatString = "{0:c}", ConvertEmptyStringToNull = true)]
但就是这样。无需其他更改。我现在可以输入“1,49”或“18,77”等值,所有内容都可以正确存储在我的数据库中。