我的網站有一個帶有十進制數字的數字輸入表單。這通過視圖模型發送回控制器。當驗證通過時,視圖模型被轉換爲像這樣的實體:aspnet核心/ ef核心實體的小數煩惱
quotation.WidthMeters = model.WidthMeters.
因此,這裏是有趣的開始。
我的網站是在荷蘭文化。我們使用逗號作爲小數分隔符。所以用戶在表格中輸入2,40。這被送回。我可以看到viewmodel中的數據包含2.40這是美國的說法2,40。現在當這個值被分配給實體時,它突然改變爲240.因此quotation.WidthMeters
現在是240,但分配它的屬性(model.WithMeters
)是2.40。
爲什麼?
(可能是重要的補充:我做了我的控制器運行在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
在我的表單中我使用了<input type="number" />
場至少在Chrome和Firefox總是帶小數點送多少回。 我切換回文本字段並將文化更改爲nl-NL。現在我可以輸入帶有十進制逗號的數字,並由服務器正確處理。
所以TRWTF是爲什麼一個瀏覽器在數字字段中顯示一個逗號,但用點回送一個逗號?
所以你告訴我們,將小數點分配給另一個小數點會將數值從2.40更改爲240? – user743414
@ user743414請參閱我的編輯 – jao
您是否安裝了https://www.nuget.org/packages/Microsoft.AspNetCore.Localization/? – haim770