Невозможно преобразовать тип 'System.Collections.Generic.List <string>' в 'System.Web.Mvc.SelectList'
У меня есть следующий метод действий, у которого есть viewBag со списком строк: -
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'
Так может ли кто-нибудь сообразить, почему я не могу заполнить список DropDown списка укусов?
Благодаря
Ответы
Ответ 1
Потому что 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 }))
Ответ 2
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;}
}
Ответ 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>
Ответ 4
@Html.DropDownListFor(
m => m.Country,
new SelectList(_CountryList, "CountryID", "Title"),
new { @class = "form-control" }
)