使用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; }

考虑到我不能假设服务器将使用一种固定语言,我的疑问是:

我的方法正确吗?
还有其他更简单的方法吗?
如果我没问错,是否有现有的注释已经做了这个?

提前感谢您的关注

使用DataAnnotation定义属性的CultureInfo

您是否尝试过在您的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 }
};

其余部分只是链接解决方案的复制/粘贴