使用DataAnnotation定义属性的CultureInfo
本文关键字:CultureInfo 属性 定义 DataAnnotation 使用 | 更新日期: 2023-09-27 18:03:58
我正在研究一个MVC4应用程序,其中有一个像000000,00
这样的数据掩码字段。由于项目的主要文化是pt-BR,因此这是正确的,并且按预期工作。
问题是我们的一些开发人员将他们的区域性设置为英语,当将其提交给服务器设置为en-US时,会发生验证错误,因为该方法期望000000.00
而不是000000,00
。
我想做一个js修复来检查浏览器语言并相应地改变掩码,但如果浏览器设置为英语,服务器设置为葡萄牙语,它会失败(我们的一些测试者就是在这种情况下)。
我的计划B是使用DataAnnotation,这样服务器就知道在验证输入时应该使用的区域性。
[MagicValidation('pt-BR'))]
public virtual double? myProp { get; set; }
考虑到我不能假设服务器将使用一种固定语言,我的疑问是:
我的方法正确吗?
还有其他更简单的方法吗?
如果我没问错,是否有现有的注释已经做了这个?
提前感谢您的关注
您是否尝试过在您的web中强制使用文化?像这样配置:
<system.web>
<globalization uiCulture="pt" culture="pt-BR"/>
</system.web>
我最终使用了这个自定义模型绑定器,仅使用NumberFormatInfo
作为Convert.ToDouble()
的第二个参数(而不是CultureInfo
)。这是我使用的NumberFormatInfo
:
readonly NumberFormatInfo NumberFormatInfo = new NumberFormatInfo()
{
NumberDecimalSeparator = ",",
NumberGroupSeparator = ".",
NumberGroupSizes = new int[] { 3 }
};
其余部分只是链接解决方案的复制/粘贴