私のウェブサイトには、10進数の数値入力フォームがあります。これは、ビューモデルのコントローラに返されます。検証に合格すると、ビューモデルは次のようなエンティティに変換されます。aspnetコア/ efコアエンティティの小数点問題
quotation.WidthMeters = model.WidthMeters.
ここで楽しいことが始まります。
私のウェブサイトはオランダの文化に属しています。小数点の区切り文字にカンマを使用します。したがって、ユーザーは2,40を入力します。これが返されます。私はviewmodelのデータが2.40を含んでいることを見ることができます。それは米国の方法2,40です。この値がエンティティに割り当てられると、すべてが突然240に変化します。したがって、quotation.WidthMeters
は240になりましたが、それを割り当てるプロパティ(model.WithMeters
)は2.40です。
なぜですか?
(おそらく重要な追加するには:私は、コントローラのコンストラクタに次の2行を追加することによりにInvariantCultureでの私のコントローラの実行をした:
Thread.CurrentThread.CurrentCulture = CultureInfo.InvariantCulture;
Thread.CurrentThread.CurrentUICulture = CultureInfo.InvariantCulture;
エンティティが同じプロジェクトである)
更新
私はstartup.cs
に以下を追加すると、それが動作:
app.UseRequestLocalization(new RequestLocalizationOptions
{
DefaultRequestCulture = new RequestCulture("en-US"),
SupportedCultures = new [] {new CultureInfo("en-US") },
SupportedUICultures = new [] { new CultureInfo("en-US") }
});
文化をnl-NLに変更しても機能しませんが、オランダ文化を使用することも好ましいでしょう。私のフォームで
更新2
私は、少なくともChromeとFirefoxで常に小数点バックナンバーを送信<input type="number" />
フィールドを使用していました。 私はテキストフィールドに戻り、培養をnl-NLに変更しました。これで10進数のカンマで入力することができ、サーバーによって正しく処理されます。
TRWTFはなぜですか、ブラウザは数字フィールドにカンマを表示しますが、ドットを付けて戻すのはなぜですか?
したがって、小数点を別の小数点に割り当てると、値は2.40から240に変更されます。 – user743414
@ user743414私の編集を参照 – jao
https://www.nuget.org/packages/Microsoft.AspNetCore.Localization/をインストールしましたか? – haim770