web-dev-qa-db-ja.com

フィールドは数字でなければなりません

私はこのフィールドを持っています:

データベースのpublic decimal Price { get; set; }は10進数(7,2)です。

見る:

 @Html.EditorFor(model => model.Price, 
                 new { htmlAttributes = new { @class = "form-control" } })

値をコンマで入力すると、MVCのデフォルトの検証が受け入れられなくなります:"The field must be a number"。 (私は正規表現を使用しようとしましたが、方法はありません)

例:5,00, 55,00 or 555,00

これも:

public DateTime date { get;set; }

見る:

 @Html.EditorFor(model => model.Date, 
                 new { htmlAttributes = new { @class = "form-control" } })

MVCのデフォルトの検証では、dd/mm/yyyyの形式でのみmm/dd/yyyyの形式の日付を受け入れません。

例:13/02/2015, 15/06/2013, 25/08/2012

グローバリゼーションとは何か?どうすればこれを解決できますか?

13
developer033

私が見つけた1つの解決策は、jquery.validate.jsの検証関数をオーバーライドすることでした


<script>

    $.validator.methods.range = function (value, element, param) {
        var globalizedValue = value.replace(",", ".");
        return this.optional(element) || (globalizedValue >= param[0] && globalizedValue <= param[1]);
    }

    $.validator.methods.number = function (value, element) {
        return this.optional(element) || /-?(?:\d+|\d{1,3}(?:[\s\.,]\d{3})+)(?:[\.,]\d+)?$/.test(value);
    }
    //Date dd/MM/yyyy
    $.validator.methods.date = function (value, element) {
        var date = value.split("/");
        return this.optional(element) || !/Invalid|NaN/.test(new Date(date[2], date[1], date[0]).toString());
    }
</script>
11
Tiago S

あなたはここであなたの答えを見つけるかもしれません mvc3の10進数のエラー-値はフィールドには無効です 、私にはうまくいきませんでしたので、この一時的なものを使用しました

<div class="col-md-10">
            @{ Html.EnableClientValidation(false); }
            @Html.EditorFor(model => model.DecimalValue, new { htmlAttributes = new { @class = "form-control" } })
            @{ Html.EnableClientValidation(true); }
            @Html.ValidationMessageFor(model => model.DecimalValue, "", new { @class = "text-danger" })
        </div>

そして私はこれをここで見つけます ASP .NET MVC Disable Client Side Validation at-Field Level

1
JohanH

私は同じ問題を抱えていますが、以前はグローバリゼーションライブラリ(globalize.js)で解決していましたが、ローカリゼーションファイルが含まれないように変更しました。 cldrライブラリからそれらを取得することになっていますが、方法はわかりません。

0
LuckyNL

プロパティを[DataType(DataType.Currency)]でマークする必要があります。

[DataType(DataType.Currency)]
public decimal Price { get;set;}
0
Selma ERKILINÇ

以下のように[DisplayFormat]属性を使用してフィールドを装飾することができます。

[DisplayFormat(DataFormatString = "{0:N}", ApplyFormatInEditMode = true)]
public decimal Price { get; set; }
0
Wery Nguyen