/ / DropDownListFor nie działa z ViewData lub ViewBag - c #, asp.net-mvc

DropDownListFor nie działa z ViewData lub ViewBag - c #, asp.net-mvc

Napotkałem ten błąd ”Nie ma elementu ViewData typu IEnumerable, który ma klucz„ StatusOptions ””, gdy próbuję użyć DropDownListFor i wskaż listę wyboru

Wiem, że jest już wiele pytań na ten temat, ale żaden z nich nie rozwiązał mojego problemu.

Powiedz, że implementuję listę rozwijaną jako filtrdla zadań opartych na ich statusach. Tak więc FilterView odpowiada FilterModel, ale kontroler jest bardziej ogólnym kontrolerem PageCodel, który odpowiada PageModel, więc nie mogę mieć listy statusów zawartych w modelu, a nie ViewBag lub ViewData.

Nie chcę też kodować stanów w widoku, ponieważ są one wspierane przez usługę zewnętrzną.

Właśnie to robię teraz:

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

w moim PageControllerze:

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

według mnie:

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

Próbowałem także rzucić go na SelectList lub użyć ViewData ["StatusOptions"], nie działa.

Odpowiedzi:

0 dla odpowiedzi № 1

Wygląda na to, że próbujesz rzucić SelectList (wpisz ViewBag.StatusOptions) jako IEnumerable<SelectListItem>. Jeśli przypiszesz List<SelectListItem> do ViewBag.StatusOptions to powinno działać.


0 dla odpowiedzi nr 2

Wybierz Listę zamiast SelectListItem

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