12

次のコードが機能しています

    [Required(ErrorMessage = "Price is required.")]
    [Range(typeof(Decimal), "1", "9999", ErrorMessage = "Price xx.xx")]
    public decimal? productPrice { get; set; }

Price = EMPTY Field を指定してページを送信すると、「Price is required.」というエラー メッセージが表示されます。Price = over 9999 エラー メッセージは「Price xx.xx」です。

しかし、「aaaa」と入力すると、 「The field productPrice must be a number.」というエラー メッセージが表示されます。

入力が正しくない場合、メッセージを変更するにはどうすればよいですか? のように:「価格は 1 ~ 9999 の小数/数値である必要があります。

----更新:---- 以下のコードは動作しました

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; }
4

3 に答える 3

12

正規表現で試すことができます:

[RegularExpression(@"[0-9]*\.?[0-9]+", ErrorMessage = "{0} must be a Number.")]

Data Annotations Extensions を試すこともできます: http://dataannotationsextensions.org/Home/Wiki

または、次のような独自の実装を記述します: https://github.com/srkirkland/DataAnnotationsExtensions/blob/master/DataAnnotationsExtensions/DigitsAttribute.cs

UPDATE with 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}.")]
于 2012-08-28T17:54:55.583 に答える
5

まず、Range 属性を

[Range(typeof(Decimal), "1", "9999", ErrorMessage = "{0} must be a decimal/number between {1} and {2}.")]

MSDN によると、これは RangeAttribute を使用する有効な方法です。

2番:

「フィールド productPrice は数値でなければなりません。」

これは実際には目立たないクライアント側の JavaScript 検証です。範囲バリデーターは、数値が検証された後に起動します。これはお勧めしませんが、数値バリデーターを無効にすることができます。

$.validator.methods.number = function (n, t) {
    return true;
}
于 2012-08-28T18:04:05.173 に答える