2013-11-14 46 views
2

這是代碼:使用Html.DropDownList助手用ViewBag列表

@using SSA.Models; 

<h2>@ViewBag.Title.ToString()</h2> 

@{ 
    using(Html.BeginForm()){ 
     List<SelectListItem> selectList = new List<SelectListItem>(); 
     foreach(Item c in ViewBag.Items) 
     { 
      SelectListItem i = new SelectListItem(); 
      i.Text = c.Name.ToString(); 
      i.Value = c.SiteID.ToString(); 
      selectList.Add(new SelectListItem()); 
     } 
     Html.DropDownList("Casinos", new SelectList(selectList,"Value","Text")); 
    } 
} 

列表,選擇列表的,在斷點顯示它有108個值。什麼呈現是一個空的形式。沒有運行時錯誤。

注意:我知道使用ViewBag並不是最好的方法。這是丟棄代碼,我只想了解它爲什麼不呈現下拉菜單。

+1

爲什麼不在服務器端構造ViewBag。然後,您可以在下拉列表中簡單地引用它。 ViewBag.Casinos = new SelectList(您的IEnumerableList在這裏,「值」,「值」); 然後,您的視圖將如下所示 Html.DropDownList(「Casinos」,String.Empty) –

回答

1
@{ 
    IEnumerable<MyItemType> CDrop = ViewBag.Cat; 


     List<SelectListItem> selectList = new List<SelectListItem>(); 
     foreach (var c in CDrop) 
     { 
      SelectListItem i = new SelectListItem(); 
      i.Text = c.Decsription.ToString(); 
      i.Value = c.TypeID.ToString(); 
      selectList.Add(i); 
     } 

} 

} 

    then some where in your view. 

    @Html.DropDownList("name", new SelectList(selectList, "Value","Text")); 
6

這不是因爲它都在一個剃鬚刀代碼塊內(即@{ ... })。試試這個:

@{ 
    List<SelectListItem> selectList = new List<SelectListItem>(); 
    foreach(Item c in ViewBag.Items) 
    { 
     SelectListItem i = new SelectListItem(); 
     i.Text = c.Name.ToString(); 
     i.Value = c.SiteID.ToString(); 
     selectList.Add(new SelectListItem()); 
    } 
} 

@using (Html.BeginForm()) 
{ 
    @Html.DropDownList("Casinos", new SelectList(selectList,"Value","Text")); 
} 

這是剃刀語法的quick reference。另外,雖然你已經提到這是一次性拋棄代碼,但我仍然會提及使用view[1]models[2],只是爲了確保你知道它們。我可以提供一個簡單的例子,如果你需要的話。

+1

感謝您的回答並指出了ViewModel的好處。我意識到價值和好處,只是不希望增加此練習的複雜性。 – Metaphor

+1

@Metaphor不是問題,我完全理解。只是想確定。 –