2012-04-24 24 views
0

我有以下代碼來填充DropDownList的SelectList ingoring的SelectedValue

var list = new Dictionary<string, decimal>(); 
list.Add("1.000.000", 1000000m); 
list.Add("500.000", 500000m); 
list.Add("5.000", 5000m); 
viewModel.MyValue = 500000.00m; //of type decimal? 
viewModel.MyList = new SelectList(list, "Value", "Key", viewModel.MyValue); 

雖然在HTML

@Html.DropDownListFor(model => model.MyValue, Model.MyList, "select value") 

一切工作正常(所選擇的值傳遞給控制器​​,並定期保存),唯一不起作用的是選定的值。我傳遞的不是在下拉菜單中自動選擇的。我錯過了明顯的東西嗎?

+0

嗯,怪了,我想複製粘貼你r代碼,即使您創建了所有字符串或整數,它仍然不會選擇列表值。 – DMulligan 2012-04-24 15:48:26

+0

是的。我也嘗試使用'viewModel.MyValue.ToString()'來查看是否有一些奇怪的行爲,但沒有。我一直用List 沒有問題。猜猜我必須從頭開始一個項目,看看我能否解決這個問題。 – Iridio 2012-04-24 15:53:11

+0

...然後我複製粘貼它在一個新的項目,它的工作逐字。現在我不知道該告訴你什麼。 – DMulligan 2012-04-24 16:00:45

回答

0

我解決了這個問題。 而做的選擇列表的的toString()方法是無法匹配500000.00與500000(我把我的問題了錯誤的價值,遺憾的錯字。更新)

使用一個簡單的froeach框架,你可以看到發生什麼

viewModel.MyList = new SelectList(list, "Value", "Key", viewModel.MyValue); 
    foreach (var item in viewModel.MyList) 
    { 
    var p = viewModel.MyValue.ToString(); 
    if (item.Value == p) //here 500000 != 500000.00 
    { 
     item.Selected = true; 
     break; 
    } 
    } 

所以我解決這個問題簡單地做

var list = new Dictionary<string, decimal>(); 
list.Add("1.000.000", 1000000.00m); 
list.Add("500.000", 500000.00m); 
list.Add("5.000", 5000.00m); 

感謝所有幫助反正