2017-09-04 6 views
1

私のウェブサイトには、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はなぜですか、ブラウザは数字フィールドにカンマを表示しますが、ドットを付けて戻すのはなぜですか?

+1

したがって、小数点を別の小数点に割り当てると、値は2.40から240に変更されます。 – user743414

+0

@ user743414私の編集を参照 – jao

+0

https://www.nuget.org/packages/Microsoft.AspNetCore.Localization/をインストールしましたか? – haim770

答えて

0

正しくは聞こえません。あなたは割り当て内の型とそれらの値を(例えばデバッガ内で)二重にチェックする必要があります。 .NETランタイムで10進数を別の10進数に代入すると値が変更されるだけでは意味がありません。

+0

これは、.NETの変更タイプとは関係ありません。国際化について - ブラウザはサーバーとは異なる*文化を使います。誰かが間違った文化をハードコードしたり、間違った文化を単に使ったりしない限り、ASP.NETはこれを既に処理しています。マシンロケールがローカライズされた文字列を入力しようとするen-USに設定されている開発者のように。 –

関連する問題