I am using the following editor template to create drop downs from enums.
It works great. But if possible I'd like to use the DisplayName or Description attributes as a text value, so that the user sees "My Selection" as opposed to "MySelection".
Is this possible?
I have a feeling it might not be because it's a generic enum template, not specific to the type. I'm wondering if there is some reflection magic I can use to achieve this.
@model Enum
@{
var htmlAttributesFromView = ViewData["htmlAttributes"] ?? new { };
var htmlAttributes = Html.MergeHtmlAttributes(htmlAttributesFromView, new { @class = "form-control" });
}
@{
var values = Enum.GetValues(ViewData.ModelMetadata.ModelType).Cast<object>()
.Select(v => new SelectListItem
{
Selected = v.Equals(Model),
Text = v.ToString(),
Value = v.ToString()
});
}
<div class="form-group">
@Html.LabelFor(model => model, htmlAttributes: new { @class = "control-label col-md-3" })
<div class="col-md-8">
@Html.DropDownListFor(model => model, values, "Please Select...", htmlAttributes)
@Html.ValidationMessageFor(model => model)
</div>
<a class="infoonclick col-md-1" title="@Html.DisplayNameFor(model => model)" data-content="@Html.DescriptionFor(model => model)">
<span class="fa fa-info-circle"></span>
</a>
</div>