模型十进制验证

时间:2013-10-24 18:57:01

标签: c# asp.net-mvc asp.net-mvc-4 html-helper

我正在使用MVC 4,EF和.NET 4.0。

我有一个包含以下字段的模型:

[Display(Name = "Price")]
[Required(ErrorMessage = "Required")]
[Range(0,100)]
public decimal Price{ get; set; }

我在视图中的文本框中显示它:

@Html.TextBoxFor(s => s.Price)
@Html.ValidationMessageFor(s => s.Price)

如果我在Price文本框中键入0.3,则验证通过。但是,如果我输入.3 in(或任何以小数开头的数字),则客户端验证失败并且错误"字段Price必须是数字。"显示。

如何允许用户输入以小数开头且不显示错误的数字?

2 个答案:

答案 0 :(得分:1)

如果要在decimal中存储这样的值,则需要使用M后缀来创建小数类型的文字。

decimal d = .3; // Won't compile

decimal d = .3M; // Will compile

这是因为.3不是decimal,而是double。以下将编译而不需要任何后缀:

double dbl = .3;

答案 1 :(得分:0)

我相信将jQuery更新到最新版本,因为Jamie Dixon建议可以解决问题。但是,我目前无法在我的应用程序中更新jQuery。

作为解决方法,我添加了一个Javascript函数,它将前一个零添加到以小数开头的任何数字。

 $(document).ready(function () {

    $('#Price').keydown(function () {
        FixDecimal($('#Price'))
    });

    function FixDecimal(obj) {
       var val = obj.val();
       val = val.replace('$', '');
       if (val.indexOf('.', 0) == 0) val = '0' + val;

       obj.val(val);
     }
  });