具有全球化的十进制数据类型的MVC模态验证错误消息

时间:2014-08-12 15:27:45

标签: c# asp.net-mvc unobtrusive-validation data-annotations

我想这个话题几乎解释了这个需求。但我会尝试解释一下......

首先,我想提一下我用nuget安装了globalize js库。因此,在十进制字段中,人们可以使用“。”添加数字。和“,”取决于他们在浏览器中的区域设置。这是我设法解决的第一个问题。

第二个问题是,根据区域设置显示错误消息。我使用资源文件来实现这一点,并且工作正常,直到我意识到某些消息没有使用资源文件中的字符串。例如,当我写一个字母而不是一个数字(我在谈论那个十进制字段)时,错误信息是

The field Price must be a number. 

在我看到一些类似于我的问题之前,我无法弄清楚如何改变它。有些人用正则表达式解决了这个问题我可以做到这一点,但是你知道,我建立了全球化可以用于其他事情,现在我必须决定用户是否要放“,”或“。”在十进制字段中。我根本不想那样走。

以下是我用于在模态类

中创建该字段的代码
[Required(ErrorMessageResourceType = typeof(Resources.Validation), ErrorMessageResourceName = "Required")]
[Display(Name = "Fiyat")]
[DataType(DataType.Currency, ErrorMessage = "Fiyat geçerli değil.")] // I know that
doesn't work, but couldn't really figure out why there is an error message for datatype at all.
[Range(0, 100, ErrorMessageResourceType = typeof(Resources.Validation), ErrorMessageResourceName = "Range")]
public decimal Price { get; set; }

如果用户输入字母,或者只是使用“,”或“。”,请告诉我一些如何显示正确消息(使用资源文件的正确语言)的想法。什么时候他们的地方不让他们?

1 个答案:

答案 0 :(得分:1)

就像我在评论中所说,我遇到了同样的问题,最后我做了以下事情:

使用正则表达式只知道这是否是一个有效数字(同时接受逗号/点作为多个文化的小数分隔符),然后保留Range数据注释以测试数字是否真的有效(使用或不使用逗号/点) )和范围本身。 似乎工作得很好:))

[Display(Name = "TdPrime", ResourceType = typeof(Resources.Somethings.Something))]       
[RegularExpression(@"-?(?:\d*[\,\.])?\d+", 
                ErrorMessageResourceName = "DataType_Number", 
                ErrorMessageResourceType = typeof(Validations))]       
[Range(0, 999.9999, 
          ErrorMessageResourceName = "RangeAttribute_ValidationError",
          ErrorMessageResourceType = typeof(Validations))]
[DisplayFormat(DataFormatString = "{0:#.####}", ApplyFormatInEditMode = true)]
public decimal? TdPrime { get; set; }

您似乎决定使用角度,但至少下次您还有一个解决方案可供选择:)