在ViewModel属性验证中控制十进制验证的错误消息的最佳方法是什么?

时间:2017-03-20 13:29:11

标签: c# asp.net-mvc asp.net-mvc-5

我有一个ViewModel属性:

public decimal decProperty { get; set; }

我发现很难为上面的自定义错误消息。但是,如果我编写以下代码,我可以指定错误消息。

[RegularExpression(@"\d+(\.\d{1,2})?", ErrorMessage = "Invalid decimal")]
public string strProperty { get; set; }

理想情况下,我只想将类型保持为“十进制?”。在这种情况下,我怎么能指定“无效小数”?

感谢。

1 个答案:

答案 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仅适用于intdouble

另一种方法是实施自定义ClientDataTypeModelValidatorProviderModelValidator。这使您可以完全控制。它们在Global.asax Application_Start()中注册。每次ModelBinder尝试绑定小数时都会有效,不需要为每个ViewModel赋值。不幸的是,我无法向您展示我们的实施,因为它归公司所有。使用ILSpy查看MS中的代码。

this answer