Stellen Sie sich vor, ich habe eine Aufzählung wie diese (nur als Beispiel):
public enum Direction{
Horizontal = 0,
Vertical = 1,
Diagonal = 2
}
Wie kann ich eine Routine schreiben, um diese Werte in eine System.Web.Mvc.SelectList zu übernehmen, da sich der Inhalt der Aufzählung in Zukunft ändern kann? Ich möchte jeden Aufzählungsnamen als Optionstext und seinen Wert als Wertetext wie folgt erhalten:
<select>
<option value="0">Horizontal</option>
<option value="1">Vertical</option>
<option value="2">Diagonal</option>
</select>
Dies ist das Beste, was ich bisher finden kann:
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);
}
Dadurch wird der Optionstext jedoch immer als "System.Web.Mvc.ListItem" dargestellt. Das Debuggen zeigt mir auch, dass Enum.GetValues () wie erwartet 'Horizontal, Vertikal' usw. anstelle von 0, 1 zurückgibt, was mich fragen lässt, was der Unterschied zwischen Enum.GetName () und Enum ist. Wert erhalten().