Я расширяю Перечисление и, учитывая следующий код, selectListItems
универсальный Список SelectListItems, который имеет все правильные значения для моего Перечисления.
Первый цикл 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();
}
Вам нужно изменить строку, в которой вы ее строите, чтобы указать, где искать значения. В вашем случае это будет:
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
.