次のコードが機能しています
[Required(ErrorMessage = "Price is required.")]
[Range(typeof(Decimal), "1", "9999", ErrorMessage = "Price xx.xx")]
public decimal? productPrice { get; set; }
ページがPrice = EMPTYフィールドで送信されると、エラーメッセージは「Price is required。」になります。価格= 9999以上のエラーメッセージは「価格xx.xx」です。
ただし、「aaaa」と入力すると、エラーメッセージは"フィールドproductPriceは数値でなければなりません。"
入力が正しくない場合、メッセージをどのように変更できますか?のように:「価格は1から9999までの10進数/数値でなければなりません。
---- UPDATE:----以下のコードは
NULL、10進数ではなく、範囲内ですが、「。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; }
あなたは正規表現で試すことができます:
[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
[〜#〜] update [〜#〜]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.")]
または、@ Martinの提案にわずかな変更を加えたRangeを使用します(実際にはより良い解決策です)。
[Range(typeof(Decimal), "0", "9999", ErrorMessage = "{0} must be a decimal/number between {1} and {2}.")]
まず、Range属性を次のように変更したいと思います。
[Range(typeof(Decimal), "1", "9999", ErrorMessage = "{0} must be a decimal/number between {1} and {2}.")]
MSDNによると これはRangeAttributeを使用する有効な方法です。
第二:
「フィールドproductPriceは数値でなければなりません。」
これは実際には目立たないクライアント側のJavaScript検証です。数値が検証されると、範囲バリデーターが起動します。これはお勧めしませんが、数値バリデーターを無効にすることができます。
$.validator.methods.number = function (n, t) {
return true;
}
私はあなたがjQueryのバグをつまずくかもしれないと思います。その検証は、検証属性のために放出されたものと戦っています。
次のプロパティがあります。
[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は受け入れられます)。