2014-06-12 64 views
0

我正在開發ASP.NET MVC Web應用程序。在我看來之一,我有這是由一些雙值(我的視圖模型的基礎)填充列表框:嘗試獲取時發生錯誤的雙倍值

public class SuggestionViewModel 
{ 
    public bool PADP { get; set; } 
    public bool PremedicationPADP { get; set; } 
    public double NbPADP { get; set; } 
    public IEnumerable<SelectListItem> PADPItems { get; set; } 
    public bool Other { get; set; } 

    public SuggestionViewModel() 
    { 
     PADPItems = (new double[] { 0.25, 0.5, 0.75, 1, 1.25, 1.5, 1.75, 2, 2.25, 2.5, 2.75, 3, 3.25, 3.5, 3.75, 4 }).Select(d => new SelectListItem { Value = d.ToString(), Text = d.ToString() }); 

     PADCItems = (new double[] { 0.25, 0.5, 0.75, 1, 1.25, 1.5, 1.75, 2, 2.25, 2.5, 2.75, 3, 3.25, 3.5, 3.75, 4 }).Select(d => new SelectListItem { Value = d.ToString(), Text = d.ToString() }); 
    } 
} 

當我試圖通過一個動作在我的控制器來恢復這些值,我有一些錯誤的價值。例如,如果我在我的視圖'0.25'中選擇,我會得到'25 .0',如果完全錯誤。爲什麼當我試圖獲得它時價值會發生變化?

編輯:列表框HTML代碼中,我得到:

<option value ="0,25">0,25</option> 
<option value ="0,5">0,50</option> 
<option value ="0,75">0,75</option> 
<option value ="1">1</option> 
+0

請粘貼HTML標記,你得到從您的視圖代碼也 –

+5

這可能是一個本地化問題。嘗試將瀏覽器的本地化設置爲「英語美國」。您可能使用的是與「。」不同的小數點分隔符的本地化。 –

+0

感謝您的回答。我粘貼了我的HTML代碼,以便您可以看到我得到的內容。我也認爲這是一個本地化問題,但我必須使用法語本地化。 – Traffy

回答

1

我認爲,「做正確的事」是設置你的整個解決方案的法國本地化(根據意見,這是什麼你用)。但是,這通常會引入開銷並影響其他設置,例如外部組件的配置設置(例如jQueryUI,Kendo - 考慮日期)。不同的解決方案是將模型的類型從double更改爲string,並在您的控制器中使用您的目標本地化進行解析。

public class SuggestionViewModel 
{ 
    public bool PADP { get; set; } 
    public bool PremedicationPADP { get; set; } 
    public string NbPADP { get; set; } //*1 
    public IEnumerable<SelectListItem> PADPItems { get; set; } 
    public bool Other { get; set; } 

    public SuggestionViewModel() 
    { 
     PADPItems = (new double[] { 0.25, 0.5, 0.75, 1, 1.25, 1.5, 1.75, 2, 2.25, 2.5, 2.75, 3, 3.25, 3.5, 3.75, 4 }).Select(d => new SelectListItem { Value = d.ToString(), Text = d.ToString() }); 

     PADCItems = (new double[] { 0.25, 0.5, 0.75, 1, 1.25, 1.5, 1.75, 2, 2.25, 2.5, 2.75, 3, 3.25, 3.5, 3.75, 4 }).Select(d => new SelectListItem { Value = d.ToString(), Text = d.ToString() }); 
    } 
} 

我假設你在NbPADP財產(糾正我,如果我錯了)您選擇的值。當你用你的模型,你可以通過使用本地化法國將其轉換得到雙重價值:

double dNbPADP = Double.Parse(model.NbPADP, new CultureInfo("fr-FR")); 
相關問題