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<SelectListItem> retList = new List<SelectListItem>();
|
|
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;
|
|
}
|
|
}
|
|
}
|