Html.DropDownList Выбранное значение не работает (с помощью конструктора с IEnumerable <SelectListItem>)
У меня проблема, когда выбранное значение не работает для вспомогательного метода Html.DropDownList. См. Ниже:
Это мой контроллер:
public ActionResult Edit(int id = 0)
{
NewsEvent item = GetItem(id);
ViewBag.NewsItemId = new SelectList(ViewBag.NewsItemId.Items, "Id", "Name", item.NewsItemId);
return View(item);
}
Это мой вид:
@Html.DropDownList("NewsItemId",ViewBag.NewsItemId as SelectList, string.Empty,
new { @class = "form-control" })
Однако, когда я пытаюсь сделать это ниже, он работает:
@Html.DropDownList("NewsItemId", string.Empty)
Ниже также работает, но поскольку имя поля не совпадает с моделью, оно не будет размещаться правильно.
@Html.DropDownList("NewsItemIdDrop",ViewBag.NewsItemId as SelectList, string.Empty,
new { @class = "form-control" })
Причина, по которой мне нужно использовать первый вариант, заключается в том, что я могу добавить атрибут класса к элементу управления.
Может кто-нибудь помочь мне понять, что я делаю неправильно?
Ответы
Ответ 1
У вас такая же проблема:
DropDownListДля выбора значения
Проблема заключается в вашем имени свойства ViewBag. Потому что это то же самое, что и ваше свойство в модели, это не сработает. Вы должны просто изменить имя своего средства просмотра ViewBag на что-то еще, например:
ViewBag.NewsItemList = new SelectList(ViewBag.NewsItemId.Items, "Id", "Name", item.NewsItemId);
и на представлении
@Html.DropDownList("NewsItemId",ViewBag.NewsItemList as SelectList, string.Empty,
new { @class = "form-control" })
Ответ 2
Я пробовал много вещей, но в итоге получил это, как это.
В контроллере
int valittu_tila = 1;
var tapahtumantilat = new List<SelectListItem>();
tapahtumantilat.Add(new SelectListItem { Text = "Tapahtumaa kirjataan", Value = "0" });
tapahtumantilat.Add(new SelectListItem { Text = "Odottaa jonossa", Value = "1"});
tapahtumantilat.Add(new SelectListItem { Text = "Tapahtumaa käsitellään", Value = "2"});
ViewBag.tilalista = new SelectList(tapahtumantilat, "Value", "Text", valittu_tila);
А потом я просто положил (у меня тоже есть событие onchange и класс для выпадающего списка, но вы можете удалить их, если хотите).
@Html.DropDownList("tuki_tila", ViewBag.tilalista as SelectList, "-- valitse tila --", new { @onchange = "executeticketsearch();", @class = "haku_dropdowns" })
(Извините за финские значения текста и имена переменных, но это не имеет значения: D)
Ответ 3
Мне не понравилось, что вы можете использовать
@Html.DropDownList("NewsItemID")
и он работает. Затем вам нужно добавить атрибут "class", и он внезапно сломается. Я видел одно рабочее место, а другое не работало с использованием синтаксиса
@Html.DropDownList("NewsItemId",ViewBag.NewsItemId as SelectList, string.Empty,
new { @class = "form-control" })
Когда я исследовал это, я определил, что ViewBag.NewsItemId на самом деле является нулевым в представлении. Поэтому рабочий синтаксис с полями Model и ViewBag с таким же именем
@Html.DropDownList("NewsItemId", null, string.Empty,
new { @class = "form-control" })
Ответ 4
Прежде всего, как вы заполняете ViewBag.NewsItemId.Items
? Мы не видим, откуда взялись значения.
Чтобы сделать выбранное значение, оно должно быть того же типа, что и элементы ваших коллекций. Если item.NewsItemId
имеет тип T
, ViewBag.NewsItemId.Items
должен иметь тип IEnumerable<T>
(или любой другой тип коллекции, реализующий его). Кажется, это не так, потому что вы устанавливаете NewsItemId
в качестве выбранного значения, в то время как ваша коллекция основана на NewsItemId.Items
, которая может быть не одного типа.
Ответ 5
Вы должны изменить само название поля DropDownList:
@Html.DropDownList("Some_Name_that_does_not_exist_in_model", ViewBag.NewsItemId as SelectList, string.Empty, new { @class = "form-control" })
Ответ 6
изменить имя свойства viewbag на другое имя модели, используемое на странице.
Ответ 7
@Html.DropDownList("NewsItemId",ViewBag.NewsItemId as SelectList, string.Empty,
new { @class = "form-control" })
измените на
@Html.DropDownList("NewsItemId", ViewBag.NewsItemIdList as SelectList, string.Empty,
new { @class = "form-control" })
ViewBag.NewsItemIdList
имя изменено. также изменение в контроллере.
Ответ 8
У меня такая же проблема. В приведенном ниже примере переменная ViewData ["DATA_ACREDITO_MODELO_INTEGRADO"] имеет список SelectListItem с выбранным значением по умолчанию, но такой атрибут не отображается визуально.
// data
var p_estadoAcreditacion = "NO";
var estadoAcreditacion = new List<SelectListItem>();
estadoAcreditacion.Add(new SelectListItem { Text = "(SELECCIONE)" , Value = " " });
estadoAcreditacion.Add(new SelectListItem { Text = "SI" , Value = "SI" });
estadoAcreditacion.Add(new SelectListItem { Text = "NO" , Value = "NO" });
if (!string.IsNullOrEmpty(p_estadoAcreditacion))
{
estadoAcreditacion.First(x => x.Value == p_estadoAcreditacion.Trim()).Selected = true;
}
ViewData["DATA_ACREDITO_MODELO_INTEGRADO"] = estadoAcreditacion;
Я решил это, сделав первый аргумент DropdownList, отличный от атрибута id.
// error:
@Html.DropDownList("SELECT__ACREDITO_MODELO_INTEGRADO"
, ViewData["DATA_ACREDITO_MODELO_INTEGRADO"] as List<SelectListItem>
, new
{
id = "SELECT__ACREDITO_MODELO_INTEGRADO"
...
// solved :
@Html.DropDownList("DROPDOWNLIST_ACREDITO_MODELO_INTEGRADO"
, ViewData["DATA_ACREDITO_MODELO_INTEGRADO"] as List<SelectListItem>
, new
{
id = "SELECT__ACREDITO_MODELO_INTEGRADO"
...