Представьте меня есть перечисление таких, как это (только в качестве примера):Как получить значение перечисления в SelectList
public enum Direction{
Horizontal = 0,
Vertical = 1,
Diagonal = 2
}
Как я могу написать процедуру, чтобы получить эти значения в систему. Web.Mvc.SelectList, учитывая, что содержимое перечисления может быть изменено в будущем? Я хочу, чтобы каждое имя перечислений как вариант текста, а также его значение как текст значения, как это:
<select>
<option value="0">Horizontal</option>
<option value="1">Vertical</option>
<option value="2">Diagonal</option>
</select>
Это лучшее, что я могу придумать до сих пор:
public static SelectList GetDirectionSelectList()
{
Array values = Enum.GetValues(typeof(Direction));
List<ListItem> items = new List<ListItem>(values.Length);
foreach (var i in values)
{
items.Add(new ListItem
{
Text = Enum.GetName(typeof(Direction), i),
Value = i.ToString()
});
}
return new SelectList(items);
}
Однако это всегда отображает текст опции как «System.Web.Mvc.ListItem». Отладка через это также показывает мне, что Enum.GetValues () возвращает «Горизонтальный, вертикальный» и т. Д. Вместо 0, 1, как я и ожидал, что заставляет меня задаться вопросом, какая разница между Enum.GetName() и Enum. GetValue().
Это большой дубликат http://stackoverflow.com/questions/1102022/display-enum-in-combobox-with-spaces и многих других. –
[Вложения и ограничения перечислений C#] (http://www.codeducky.org/ins-outs-c-enums/) описывает преобразование строк, чисел и перечислений, а также перечисление значений перечисления. – ChaseMedallion