MVC dataannotations decimal数据类型验证

时间:2013-07-30 11:07:20

标签: validation asp.net-mvc-4 decimal data-annotations

我的应用程序是在ASP.NET MVC4上完成的。我在我的viewmodel类中使用了MVC数据注释验证。

我有一个十进制类型的列。我使用正则表达式来验证它。

 [RegularExpression(@"^\$?([0-9]{1,3},([0-9]{3},)*[0-9]{3}|[0-9]+)(.[0-9][0-9])?$",ErrorMessage = "Amount is invalid.")]
 public decimal Amount { get; set; }

在上述正则表达式的帮助下,它运作良好。 但是我想在那里增加一个条件。如果有人输入的数字如下:

12.
445.

然后它应该接受它并且还应该自动添加.00表示(12.00,445.00)。

仅供参考,我已经改变了上面的正则表达式:

[RegularExpression(@"^\$?([0-9]{1,3},([0-9]{3},)*[0-9]{3}|[0-9]+)(.[0-9][0-9]|.)?$",ErrorMessage = "Amount is invalid.")]

通过这个接受数字,如:

12.
445.

但是由于MVC数据类型十进制,它给出了另一个验证消息..

enter image description here

有谁能建议我如何管理它?

1 个答案:

答案 0 :(得分:1)

我使用影子字段提供:

class myModel
{
    ... 
     public decimal Amount { get; private set; }

    [RegularExpression(@"^\$?([0-9]{1,3},([0-9]{3},)*[0-9]{3}|[0-9]+)(.[0-9][0-9])?$",ErrorMessage = "Amount is invalid.")]
    public string AmountStringed  //use this field on your form input
    {
        get { return Amount.ToString(); }
        set { Amount = decimal.parse(value); } //assign Amount
    } 
}

所以你不必做任何客户端或服务器端的攻击