using System; using System.Collections.Generic; using System.Reflection; using System.Web.Mvc; namespace Sevomin.Models.Helpers { public class StringValue : System.Attribute { private string _value; public StringValue(string value) { _value = value; } public string Value { get { return _value; } } } public static class StringEnum { public static SelectList GetSelectList(Type inputEnum, bool textAsValue) { List retList = new List(); if (inputEnum.IsEnum) { foreach (Enum property in Enum.GetValues(inputEnum)) { retList.Add(new SelectListItem { Text = GetStringValue(property), Value = Convert.ToInt16(inputEnum.GetField(property.ToString()).GetValue(null)).ToString() //textAsValue ? GetStringValue(property) : property.ToString() }); } return new SelectList(retList, "Value", "Text"); } else throw new InvalidOperationException("The input type is not an enum."); } public static string GetStringValue(Enum value) { Type type = value.GetType(); //Check first in our cached results... //Look for our 'StringValueAttribute' //in the field's custom attributes FieldInfo fi = type.GetField(value.ToString()); StringValue[] attrs = fi.GetCustomAttributes(typeof(StringValue), true) as StringValue[]; foreach (var item in attrs) { if (!string.IsNullOrEmpty(item.Value)) return item.Value; } return string.Empty; } } }