2013-10-24 82 views
0

我使用的是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(或任何以小数开头的数字),则客户端验证将失败,并显示错误“字段价格必须是数字”。被展示。

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

回答

0

我相信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); 
    } 
    }); 
1

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

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

decimal d = .3M; // Will compile

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

double dbl = .3;

+0

我将字段更改为'public double Price {get;组; }'我仍然有同样的问题。 – burntmarshmallows

+0

您使用哪种客户端验证? –

+0

我相信任何内置MVC。不使用任何额外的东西 – burntmarshmallows