小数フィールドとローカライズのためのMVC3編集

私のロケールは小数点記号のためにドットではなくカンマを使用します。

MVC3では、10進数の値が表示される編集ビューを開くと

@Html.EditorFor(model => model.MyDecimalVal)

値が正しく表示されます。

値をコンマで入力すると「値は数字ではありません」というエラーが表示され、ドットで値を入力するとエラーは表示されませんが、実際には値は保存されません。

この状況をどのように処理するのですか?

10

2 答え

This blog post recommends overriding the default jQuery validate number and range rules in order to enable client-side support of the comma decimal separator.

これらの問題を解決するには、デフォルト実装を   range()およびnumber()関数のjquery.validate.jsファイル。我々   別の.jsファイル(たとえばjQueryFixes.js)を作成します。ここでは、   これらのデフォルト機能を、   小数点の区切り記号としてのカンマ。ファイルの内容は次のとおりです。   次のようなものです:

$.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);
}
16
追加された
これを行う適切な方法はありますか?
追加された 著者 Christoph Brückmann,
つまり、異なる文化の異なる小数点値の扱いはどうですか?私はちょうど1つの文化に値を格納したいと思っていますが、Webページの訪問者に彼の文化の中に小数点の値を入れて検証する機会を与えたいと思います。
追加された 著者 Christoph Brückmann,

バリデーションロジックを調整することでこの問題を解決する方法についてはすでに説明していますので、ここでは別のアプローチがあります。

Put the below code inside your web.config file under the node if you would like to set the culture to en. It will take care of decimal delimiter:


私はわからないが、 DateTime では、依然としてサーバーのロケールにバインドされている。

6
追加された
ありがとう、これはdatetimeとnumberの両方のフォーマットを扱っていました(しかしenロケールのために強制されました)
追加された 著者 bzamfir,
どのようにこれが解決策であり、文化を英語に強制するのか?
追加された 著者 gangelo,
@bzamfirの権利。私がこのアプローチと呼ぶのは、一時的な修正です。永続的な修正は、サーバーのロケールを構成することです。
追加された 著者 tugberk,
@ gangeloエンドユーザーが文化固有の価値について気にしないとき、私はこれがかなり良い解決であることを確信しています!
追加された 著者 tugberk,
それは絶対に素晴らしいです。あなたは私の日を救った、ありがとう。
追加された 著者 MikkaRin,