在通用枚举编辑器模板中获取显示名称

时间:2015-08-01 12:35:52

标签: asp.net-mvc enums mvc-editor-templates

我使用以下编辑器模板从枚举中创建下拉列表。

效果很好。但是如果可能的话,我想将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>

0 个答案:

没有答案