2016-12-06 154 views
0

在我的asp.net mvc4應用程序中我使用MVVM和ajax(使用json數據類型)將數值(德文數字小數點分隔符:例如17,3)從服務器的視圖(客戶端)。我通過查看相應的sql數據庫表字段中的條目來檢查結果。數值被正確存儲(17,3)。到現在爲止還挺好。 當我再次檢索到視圖中的值時,它會顯示一個英文小數點分隔符(17.3)。將此條目保存到服務器將導致sql數據庫表中的NULL條目。 當我手動輸入值17.3到視圖中並將條目保存到服務器時,這也會導致sql數據庫表中的NULL條目。MVVM從服務器到客戶端的數值數據沒有正確傳輸

在模型和視圖模型中,數字條目的屬性被定義爲double。在視圖中我使用@ Html.TextBoxFor(....)

任何建議是什麼導致這種情況,以及如何解決這個問題?

感謝和問候,馬努

+1

這聽起來像你有一個數據庫的文化與用戶界面的文化不匹配。 – ChrisF

+0

在web.config中。我有:<全球化uiCulture =「de」culture =「de-AT」>。我認爲應該這樣做。 – Manu

+0

@Manu我編輯了我的答案 – rbr94

回答

1

在DAL /傳輸層中的所有值應該使用CultureInfo.InvariantCulture用於傳輸和數據的存儲。

當您顯示這些值時,請引入適當的CultureInfo以轉換爲和從文化特定的數據呈現。

+0

我在哪裏以及如何完成我的數字屬性(讓我們稱之爲'NumAmount')是InvariantCulture類型?在模型中,我將它定義爲double?在modelView中它也是一個雙精度型。所以我認爲它一定是在發佈ajax調用或者控制器從服務器獲取數據的地方,對吧?但我不知道如何使'DAL /傳輸層使用CultureInfo.InvariantCulture ...'。 – Manu

+0

在DAL /傳輸層中,如果您正在進行大量字符串數字/日期轉換,通常只是一個問題。您需要查看的區域是從前端到模型的轉換,即將適當的CultureInfo傳遞到Html.TextBoxFor。 – toadflakz

1

嘗試將數據庫的輸出格式化爲德國文化。樣本:

var yourValue = 20.3; 

var cultureInfo = new CultureInfo("de-DE"); 

var formattedValue = yourValue.ToString("F1", cultureInfo); 

//formattedValue => 20,3; 

編輯1:

根據您的問題編輯我提出以下幾點建議:

您可以使用

@{var formated = String.Format("{0:0.0}", yourValue);} 
@Html.TextBoxFor(m => yourValue, formated, new { id = "yourId"}) 
+0

添加var cultureInfo = new CultureInfo(「de-DE」);進入頁面的腳本部分? – Manu

+0

@Manu你也可以嘗試'Html.TextBox(「abc」,yourValue.ToString(「F1」,new CultureInfo(「de-DE」)));'。如果我的回答很有用,請註冊 – rbr94

+0

@Manu它能解決您的問題嗎? – rbr94

相關問題