Как получить значения перечисления в SelectList

Представьте, что у меня есть перечисление, подобное этому (просто в качестве примера):

public enum Direction{
    Horizontal = 0,
    Vertical = 1,
    Diagonal = 2
}

Как я могу написать процедуру для получения этих значений в System.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 ().

Ответы на вопрос(12)

Ваш ответ на вопрос