2014-01-30 4 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, почему я не могу заполнить мой раскрывающийся список в списке укусы? Thanks

ответ

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" } 
) 
Смежные вопросы