我有一个ViewModel属性:
public decimal decProperty { get; set; }
我发现很难为上面的自定义错误消息。但是,如果我编写以下代码,我可以指定错误消息。
[RegularExpression(@"\d+(\.\d{1,2})?", ErrorMessage = "Invalid decimal")]
public string strProperty { get; set; }
理想情况下,我只想将类型保持为“十进制?”。在这种情况下,我怎么能指定“无效小数”?
感谢。
答案 0 :(得分:2)
您可以使用Range
属性作为解决方法。根据{{3}},仅在存在值时才会测试范围。
[Range(decimal.MinValue, decimal.MaxValue, ErrorMessage = "Invalid decimal")]
public decimal? decProperty { get; set; }
顺便说一句,您还可以定义资源,以便您的错误消息可以翻译。
[Range(decimal.MinValue, decimal.MaxValue, ErrorMessageResourceType = typeof(Resources),
ErrorMessageResourceName = "Decimal_ValidationError")]
编辑
事实证明,Range
仅适用于int
和double
。
另一种方法是实施自定义ClientDataTypeModelValidatorProvider
和ModelValidator
。这使您可以完全控制。它们在Global.asax Application_Start()
中注册。每次ModelBinder尝试绑定小数时都会有效,不需要为每个ViewModel赋值。不幸的是,我无法向您展示我们的实施,因为它归公司所有。使用ILSpy查看MS中的代码。