2013-05-17 46 views
0

此代碼顯示包含一些選項的下拉框。選項是小數。用戶選擇一個,然後按保存。回發時,應在下拉框中選擇所選的選項。這不是字符串的問題。此代碼使用小數。當回發回來時,沒有選擇任何東西。我認爲ASP.NET MVC由於小數精度而無法匹配。在ASP.NET MVC3中使用帶小數的DropDownList

小數的列表,以在一個下拉框

public static List<decimal> MyCustomFieldOptions 
{ 
    get 
    { 
     var x = new List<decimal>(); 
     x.Add(0.10m); 
     x.Add(0.25m); 

     return x; 
    } 
} 

上視圖模型的屬性顯示:

[UIHint("MyCustomField")] 
public decimal MyCustomField { get; set; } 

在視圖:

@Html.EditorFor(model => model.MyCustomField) 

EditorTemplate:

@model decimal 

@Html.DropDownListFor(x => x, new SelectList(ProjectNamespace.MyViewModel.MyCustomFieldOptions), new {size="2"}) 

/Shared/EditorTemplates/MyCustomField.cshtml

該代碼可以正確地顯示有兩個選項可供選擇的列表框。用戶可以選擇一個,按保存並且Controller獲取該值。控制器將會看到0.250.1。但是,當頁面返回時,該項目不再被選中。

我很確定這是因爲小數精度問題。

@Model.MyCustomField.ToString()返回0.250

注意什麼編輯模板輸出:

<select id="MyCustomField" name="MyCustomField" size="2"> 
    <option>0.10</option> 
    <option>0.25</option> 
</select> 

的選項的小數精度是不同的。 0.25,而不是0.250所以它可能無法匹配。

我讀了SO article,它給了我創建編輯器模板並查看小數精度的提示。

回答

0

使用期權的價值屬性,

 <option value="0.100">0.10</option> 
    <option value="0.250">0.25</option>