我使用以下编辑器模板从枚举中创建下拉列表。
效果很好。但是如果可能的话,我想将DisplayName或Description属性用作文本值,以便用户看到“我的选择”而不是“MySelection”。
这可能吗?
我感觉它可能不是因为它是一个通用枚举模板,不是特定于类型。我想知道是否有一些反射魔法可以用来实现这一点。
@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>