/ / DropDownListFor не працює з ViewData або ViewBag - c #, asp.net-mvc

DropDownListFor не працює з ViewData або ViewBag - c #, asp.net-mvc

Я виникла цю помилку "Немає пункту ViewData типу IEnumerable, який має ключ" StatusOptions ", коли я намагаюся використовувати DropDownListFor і вказую на список вибору

Я знаю, що щодо цього вже багато питань, але жодна з них не вирішила моєї проблеми.

Скажімо, я реалізую випадаючий список як фільтрдля завдань на основі їх статусів. Отже, FilterView відповідає FilterModel, але контролер є більш загальним PageController, який відповідає PageModel, тому я не можу мати список статусів, що містяться в моделі, а не ViewBag або ViewData.

Я також не хочу "hardcode" статусів у поданні, оскільки вони підтримуються зовнішньої служби.

Ось що я зараз роблю:

public class FilterModel
{
public string SelectedStatus {get;set;}
}

на моєму PageController:

public Result ListTasks()
{
...
ViewBag.StatusOptions = new SelectList (
new[] { "New", "Pending", "Completed"}.Select(x => new SelectListItem { Value = x, Text = x }),
"Value",
"Text"
);
...
}

на мій погляд:

Html.DropDownListFor(model => model.SelectedStatus, (IEnumerable<SelectListItem>)ViewBag.StatusOptions)

Я також спробував відправити його до SelectList або за допомогою ViewData ["StatusOptions"], і не працює.

Відповіді:

0 для відповіді № 1

Здається, ви намагаєтеся відлити SelectList (введіть для ViewBag.StatusOptions) як IEnumerable<SelectListItem>. Якщо призначити List<SelectListItem> to ViewBag.StatusOptions, тоді він повинен працювати.


0 для відповіді № 2

ВиберітьList замість SelectListItem

Html.DropDownListFor(model => model.SelectedStatus, ViewBag.StatusOptions as SelectList)