2014-01-30 50 views
12

我有以下行動方法,其中有一個viewBag與字符串列表: -無法將類型「System.Collections.Generic.List <string>」到「System.Web.Mvc.SelectList」

public ActionResult Login(string returnUrl) 
     { 
      List<string> domains = new List<string>(); 
    domains.Add("DomainA"); 

      ViewBag.ReturnUrl = returnUrl; 
      ViewBag.Domains = domains; 
      return View(); 
     } 

,並在視圖我想建立一個下拉列表,顯示viewBag字符串如下: -

@Html.DropDownList("domains",(SelectList)ViewBag.domains) 

但我得到了以下錯誤: -

無法將類型「System.Collections.Generic.List」到 「System.Web.Mvc.SelectList」

因此,誰能adive爲什麼我不能填充蜇傷的名單我的下拉列表? 謝謝

回答

23

因爲DropDownList不是接受字符串的列表。它接受IEnumerable<SelectListItem>。您有責任將您的字符串列表轉換爲該列表。這是很容易做到,但:

domains.Select(m => new SelectListItem { Text = m, Value = m }) 

然後,你可以喂,要DropDownList

@Html.DropDownList("domains", ((List<string>)ViewBag.domains).Select(m => new SelectListItem { Text = m, Value = m })) 
3

要完成克里斯·普拉特的答案,這裏的一些示例代碼來創建下拉:

@Html.DropDownList("domains", new SelectList(((List<string>)ViewBag.domains).Select(d => new SelectListItem { Text = d, Value = d }), "Value", "Text")) 

這將產生以下標記:

<select id="domains" name="domains"> 
    <option value="item 1">item 1</option> 
    <option value="item 2">item 2</option> 
    <option value="item 3">item 3</option> 
</select> 
+0

你並不需要創建SelectList'的'一個實例。所有'DropDownList'需要的是'IEnumerable '。 –

4

ViewBag不是強類型。您可以使用ViewModel類傳遞實例以查看,以便視圖可以使用多個數據源。

public ActionResult Login(string returnUrl) 
    { 
     List<string> domains = new List<string>(); 
     domains.Add("DomainA"); 

     ViewModel model=new ViewModel(); 
     miewModel.ReturnUrl = returnUrl; 
     miewModel.Domains =new SelectList(domains); 
     return View(model); 
    } 

    Public Class ViewModel() 
    { 
     property Url ReturnUrl{get;set;} 
     property SelectList Domains{get;set;} 
    } 
0
@Html.DropDownListFor(
    m => m.Country, 
      new SelectList(_CountryList, "CountryID", "Title"), 
      new { @class = "form-control" } 
) 
相關問題