2012-08-24 83 views
8

所以我有以下的(僞代碼):MVC C#html.dropdownlist和viewbag

string selectedvalud = "C"; 
List<SelectListItem> list= new List<SelectListItem>(); 
foreach(var item in mymodelinstance.Codes){ 
    list.Add(new SelectListItem { Text = item.Name, Value = item.Id.Tostring(), Selected = item.Id.ToString() == selectedvalue ? true : false }); 
} 

ViewBag.ListOfCodes = list; 

對我的看法:

<%: Html.DropDownList("Codes", (List<SelectListItem>)ViewBag.ListOfCodes , new { style = "max-width: 600px;" })%> 

現在,它到達認爲, 「列表」 前已經用項目填充它並標記了已經選擇的項目。但是當它進入視圖時,沒有任何選項被標記爲選中狀態。

我的問題是,是否有可能使用viewbag來傳遞項目,或者我應該使用不同的媒介?因爲它會刪除選項中的選定標誌,如果我以這種方式使用它。

+0

你可以在你的控制器斷點,並仔細檢查至少有一項'list'已被標記爲'Selected = true;'?我不認爲ViewBag正在搞亂你的列表。 – StuartLC

+0

是的,我做到了這一點,它標誌着正確的選擇。 – gdubs

回答

21

嘗試這樣的:

ViewBag.ListOfCodes = new SelectList(mymodelinstance.Codes, "Id", "Name"); 
ViewBag.Codes = "C"; 

,並在您的視圖:

<%= Html.DropDownList(
    "Codes", 
    (IEnumerable<SelectListItem>)ViewBag.ListOfCodes, 
    new { style = "max-width: 600px;" } 
) %> 

對於這個工作,你顯然必須有id爲「C」的項目您的收藏裏面,就像這樣:

ViewBag.ListOfCodes = new SelectList(new[] 
    { 
     new { Id = "A", Name = "Code A" }, 
     new { Id = "B", Name = "Code B" }, 
     new { Id = "C", Name = "Code C" }, 
    }, "Id", "Name"); 
+0

這部分選擇「代碼C」? – gdubs

+1

這一個:'ViewBag.Codes =「C」;'。並且由於在視圖中您使用了代碼作爲您的'DropDownList'助手的第一個參數,它將從ViewBag中選擇值。顯然,如果你使用了視圖模型和強類型的DropDownListFor'幫助器,並且忘記了ViewBag,那我總是推薦給人們,事情可能會更加清晰。 –

+0

我同意,我也會這樣做。但在這種情況下,該列表中的值將被附加到另一個下拉列表的另一個值上,該列表最終將寫入該實例。我希望它是不同的建模.. – gdubs