2017-09-04 94 views
1

我的網站有一個帶有十進制數字的數字輸入表單。這通過視圖模型發送回控制器。當驗證通過時,視圖模型被轉換爲像這樣的實體: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是爲什麼一個瀏覽器在數字字段中顯示一個逗號,但用點回送一個逗號?

+1

所以你告訴我們,將小數點分配給另一個小數點會將數值從2.40更改爲240? – user743414

+0

@ user743414請參閱我的編輯 – jao

+0

您是否安裝了https://www.nuget.org/packages/Microsoft.AspNetCore.Localization/? – haim770

回答

0

這聽起來不正確。你應該仔細檢查你的類型以及它們的值(例如在調試器中)。在.NET運行時中將另一個十進制值指定爲另一個十進制值將會改變該值,這沒有任何意義。

+0

這與.NET更改類型無關。這關乎國際化 - 瀏覽器使用與服務器不同的文化。 ASP.NET已經處理過這個問題,除非有人對錯誤的文化進行硬編碼,或者只是使用錯誤的文化。就像開發人員的機器語言環境設置爲「en-US」,試圖輸入本地化的字符串。 –