Im using a snippet of code from another stackoverflow question:
namespace MvcHtmlHelpers
{
public static class htmlHelpers
{
///
You could use reflection to fetch the value:
public static MvcHtmlString RadioButtonForEnum<TModel, TProperty>(
this HtmlHelper<TModel> htmlHelper,
Expression<Func<TModel, TProperty>> expression
)
{
var metaData = ModelMetadata.FromLambdaExpression(expression, htmlHelper.ViewData);
var sb = new StringBuilder();
var enumType = metaData.ModelType;
foreach (var field in enumType.GetFields(BindingFlags.Static | BindingFlags.GetField | BindingFlags.Public))
{
var value = (int)field.GetValue(null);
var name = Enum.GetName(enumType, value);
var label = name;
foreach (DisplayAttribute currAttr in field.GetCustomAttributes(typeof(DisplayAttribute), true))
{
label = currAttr.Name;
break;
}
var id = string.Format(
"{0}_{1}_{2}",
htmlHelper.ViewData.TemplateInfo.HtmlFieldPrefix,
metaData.PropertyName,
name
);
var radio = htmlHelper.RadioButtonFor(expression, name, new { id = id }).ToHtmlString();
sb.AppendFormat(
"<label for=\"{0}\">{1}</label> {2}",
id,
HttpUtility.HtmlEncode(label),
radio
);
}
return MvcHtmlString.Create(sb.ToString());
}
I use [Description]
in my code, but you can simply change that to use DisplayAttribute
:
https://gist.github.com/1287511
You probably need an extension method for your enum to get the display attribute that you put on your enum options. Then when you get the name or value of your options enum value in the RadioButtonForEnum method you would just call the extensions method to fill up the value.
I recently wrote a blog post about this topic: http://joerijans.blogspot.com/2011/10/triple-door-extension-method-custom.html
Hope this helps.