Wyobraźmy mam wyliczenie takich jak ten (tylko jako przykład):Jak zdobyć wartości wyliczenia w SelectList
public enum Direction{
Horizontal = 0,
Vertical = 1,
Diagonal = 2
}
Jak mogę napisać procedurę, aby te wartości do systemu. Web.Mvc.SelectList, biorąc pod uwagę, że zawartość wyliczenia może ulec zmianie w przyszłości? Chcę dostać każdą nazwę wyliczeń jako tekstu opcji, a jego wartość jako tekst wartości, tak:
<select>
<option value="0">Horizontal</option>
<option value="1">Vertical</option>
<option value="2">Diagonal</option>
</select>
To jest najlepsze, co mogę wymyślić do tej pory:
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);
}
jednak zawsze wyświetla tekst opcji jako "System.Web.Mvc.ListItem". Debugowanie przez to również pokazuje mi, że Enum.GetValues () zwraca "poziomy, pionowy" itp. Zamiast 0, 1, jak się spodziewałem, co powoduje, że zastanawiam się, jaka jest różnica między Enum.GetName() i Enum. GetValue().
To jest duży duplikat http://stackoverflow.com/questions/1102022/display-enum-in-combobox-with-spaces i wielu, wielu innych. –
[Wyczerpujące wydania C#] (http://www.codeducky.org/ins-outs-c-enums/) opisuje konwersję między łańcuchami, liczbami i wyliczeniami oraz sposób wyliczenia wartości wyliczeniowych. – ChaseMedallion