模型十进制验证

本文关键字:验证 十进制 模型 | 更新日期: 2023-09-27 18:36:50

我正在使用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)

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

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

模型十进制验证

如果要

decimal中存储这样的值,则需要使用 M 后缀来创建十进制类型的文本。

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

decimal d = .3M; // Will compile

这是因为.3不是decimal,而是double。以下内容无需任何后缀即可编译:

double dbl = .3;

我相信

按照Jamie Dixon的建议将jQuery更新到最新版本可以解决问题。但是,我目前无法在我的应用程序中更新 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);
     }
  });