manish-gusain8909 Ответов: 1

Как получить выбранное значение из динамического выпадающего списка( привязанного с помощью view bag) в mvc.


у меня есть динамический выпадающий список (значения извлекаются из выпадающего списка и привязываются с помощью viewbag ), выбранное значение которого я хочу в контроллере.

Что я уже пробовал:

контроллер:
dt = objCommonClass.GETGAME();
 OblListTournamentRegistration = null;
OblListTournamentRegistration = new List<SelectListItem>();
foreach (DataRow dr in dt.Rows)
{
OblListTournamentRegistration.Add(new SelectListItem() { Text = dr["GAME_NAME"].ToString(), Value = dr["GAME_ID"].ToString() });
}
                    
ViewBag.GAME = OblListTournamentRegistration;


вид:
@Html.DropDownListFor(model=>model.TournamentGame, ViewBag.GAME as SelectList, "Select Game", new { @id = "ddlGame", @class = "form-control glyphicon glyphicon-user" })

ошибка
{"There is no ViewData item of type 'IEnumerable<SelectListItem>' that has the key 'TournamentGame'."}

1 Ответов

Рейтинг:
2

Richard Deeming

ViewBag.GAME устанавливается на OblListTournamentRegistration, который является List<SelectListItem>.

Следовательно, ViewBag.GAME as SelectList возвращается null, потому что List<SelectListItem> это не так SelectList.

Когда список элементов передается в DropDownListFor является null, он ищет элемент в ViewBag с ключом, который соответствует имени свойства ("TournamentGame"). Поскольку такого ключа не существует, он выбрасывает (слегка сбивает с толку) ошибка, которую вы получаете.

Измените представление в соответствии с типом используемой коллекции элементов:

@Html.DropDownListFor(model => model.TournamentGame, (IEnumerable<SelectListItem>)ViewBag.GAME, "Select Game", new { @id = "ddlGame", @class = "form-control glyphicon glyphicon-user" })

Это работает, потому что List<T> инвентарь IEnumerable<T>, и DropDownListFor имеет перегрузку, которая принимает IEnumerable<SelectListItem> объект как коллекция элементов[^].


manish-gusain8909

Не работает и ошибка: "дополнительная информация: нет элемента ViewData типа 'IEnumerable<selectlistitem>', который имеет ключ 'GAME_NAME'."

в моем datatable есть два столбца gameid и gamename,которые я хочу показать в выпадающем списке(text = game и value= gameid). выбранный gameid я хочу, чтобы контроллер на submit.

Richard Deeming

Перечитайте мой ответ еще раз: где я писал ViewBag.GAME_NAME?

Основываясь на коде в вашем вопросе, я написал ViewBag.GAME, что соответствует тому, что вы установили в своем контроллере.