我有以下代码正常工作
[Required(ErrorMessage = "Price is required.")]
[Range(typeof(Decimal), "1", "9999", ErrorMessage = "Price xx.xx")]
public decimal? productPrice { get; set; }
提交页面时 Price = EMPTY字段错误消息是“需要价格。”。 价格=超过9999错误消息是“价格xx.xx”。
但是,当我输入'aaaa'时,错误信息是 “字段productPrice必须是数字。”
如果键入不正确,如何更改消息? 例如:“价格必须是1-9999之间的小数/数字。
----更新:---- 以下代码与
一起使用NULL,非十进制,在范围之间,但不使用“.1”。
[Required(ErrorMessage = "Price is required.")]
[RegularExpression(@"[0-9]*\.?[0-9]+", ErrorMessage = "Price must be a Numbers only.")]
[Range(typeof(Decimal), "1", "9999", ErrorMessage = "Price must be a decimal/number between {1} and {2}.")]
public decimal? productPrice { get; set; }
答案 0 :(得分:12)
您可以尝试使用正则表达式:
[RegularExpression(@"[0-9]*\.?[0-9]+", ErrorMessage = "{0} must be a Number.")]
您还可以尝试数据注释扩展: http://dataannotationsextensions.org/Home/Wiki
或编写自己的实现,如下所示: https://github.com/srkirkland/DataAnnotationsExtensions/blob/master/DataAnnotationsExtensions/DigitsAttribute.cs
<强>更新强> 使用REGEX(匹配$ 9,999.99 | $ 0.70 | .1)
[RegularExpression(@"^\$?([1-9]{1}[0-9]{0,2}(\,[0-9]{3})*(\.[0-9]{0,2})?|[1-9]{1}[0-9]{0,}(\.[0-9]{0,2})?|0(\.[0-9]{0,2})?|(\.[0-9]{1,2})?)$", ErrorMessage = "{0} must be a Number.")]
或使用Range略微修改@Martin建议(实际上是一个更好的解决方案):
[Range(typeof(Decimal), "0", "9999", ErrorMessage = "{0} must be a decimal/number between {1} and {2}.")]
答案 1 :(得分:5)
首先,我认为您需要将Range属性更改为
[Range(typeof(Decimal), "1", "9999", ErrorMessage = "{0} must be a decimal/number between {1} and {2}.")]
According to MSDN,这是使用RangeAttribute的有效方法。
第二
“字段productPrice必须是数字。”
这实际上是不引人注意的客户端JavaScript验证。您的范围验证器将在验证号码后触发。您可以禁用数字验证器,但我不建议这样做:
$.validator.methods.number = function (n, t) {
return true;
}
答案 2 :(得分:0)
我认为你可能会绊倒jQuery中的一个bug。该验证是针对您的验证属性而发布的内容。
我有以下属性:
[Display(ResourceType = typeof(TaxSetupResources), Name = "Model_Value")]
[RegularExpression(@"(^\d+$)|(^\.\d{1,4}$)|(^\d*\.\d{0,4}$)", ErrorMessageResourceName="Model_InvalidFormatForAmount", ErrorMessageResourceType=typeof(TaxSetupResources))]
public decimal? Value { get; set; }
在这样的视图中使用:
<div>
@Html.TextBoxFor(t => t.Tiers[i].Value, new { title = @Resources.TaxSetupResources.Model_ValueTip })
<br />@Html.ValidationMessageFor(t => t.Tiers[i].Value)
</div>
就其本身而言,值“foo”会产生我的错误消息。值0.075被接受。值.075会产生“字段值必须是数字”,这与您似乎遇到的问题相同。
基于this SO article,我在文档准备中添加了以下内容:
$(function () {
$.validator.methods.number = function (value, element) {
return parseFloat(value).toString() !== "NaN";
}
});
现在我只收到错误消息,并且仅在预期时(接受.075)。