Проблема с ASP.Net MVC SelectLIst и списком <SelectListItems> - PullRequest
25 голосов
/ 30 июня 2010

Я расширяю Enum и, учитывая следующий код, selectListItems - это общий список SelectListItems, который имеет все правильные значения для моего Enum.

Первый цикл foreach работает нормально.Однако, когда я создаю фактический SelectList и передаю selectListItems, все значения теряются.Как я могу сохранить эти значения без изменений?

foreach (SelectListItem item in selectListItems)
{
    string tex = item.Text;
    string val = item.Value;
    string sel = item.Selected.ToString();
}

SelectList selectList = new SelectList(selectListItems);

foreach (SelectListItem slid in selectList)
{
    string tex = slid.Text;
    string val = slid.Value;
    string sel = slid.Selected.ToString();
}

1 Ответ

53 голосов
/ 30 июня 2010

Вам нужно изменить строку, в которой вы ее построили, чтобы указать, где искать значения.В вашем случае это будет:

SelectList selectList = new SelectList(selectListItems, "Value", "Text");

Это не будет переносить выбранный элемент, хотя.В этом случае вам необходимо выяснить, какой элемент должен быть выбранным, и передать его значение через четвертый параметр.

Вот пример:

List<SelectListItem> items = new List<SelectListItem>();
items.Add(new SelectListItem() { Text = "Test1", Value = "1", Selected = false });
items.Add(new SelectListItem() { Text = "Test8", Value = "8", Selected = true });
items.Add(new SelectListItem() { Text = "Test3", Value = "3", Selected = false });
items.Add(new SelectListItem() { Text = "Test5", Value = "5", Selected = false });

SelectList sl = new SelectList(items, "Value", "Text", "8");

Вы также можете захотетьзацените этот SO поток , который может быть полезен.

Редактировать: только что увидел ваш комментарий, и он не работает, потому что он недостаточно умен, чтобы знать, чтобы искать Text и Value поля по умолчанию.Вы можете передать ему тип объектов, и это даст вам возможность привязаться к нему, определив, какие свойства сопоставлять со свойствами Text и Value.

...