Enum的DisplayTemplate不适用于某些值

时间:2015-04-22 22:13:51

标签: c# asp.net-mvc enums asp.net-mvc-5 display-templates

我有一个名为Priority的枚举类模型。我有一个优先级的编辑器模板和一个Enum的显示模板。在编辑器模板中,我创建了一个下拉列表,其中列出了Priority的所有可能值,并在文本旁边显示了glyphicon。

问题是,在编辑器模板中,对于(e == Model)的情况,行@Html.DisplayFor(model => e, "Enum")不会调用显示模板,该选项只显示图标而不显示文本。当我调试时,它会通过该行,但不会传递给显示模板。对于其他选项,它运作良好。

我的观点和模型看起来像这样:

Priority.cs:

public enum Priority {
    [Display(Name = "Low Priority")]
    Low = 1,
    [Display(Name = "High Priority")]
    High = 2,
    [Display(Name = "Critical Priority")]
    Critical = 3
}

Enum.cshtml(显示模板):

@model Enum

@if (EnumHelper.IsValidForEnumHelper(ViewData.ModelMetadata)) {
    // Display Enum using same names (from [Display] attributes) as in editors
    string displayName = null;
    var selectList = EnumHelper.GetSelectList(ViewData.ModelMetadata, Model);
    foreach (SelectListItem item in selectList) {
        if (item.Selected) {
            displayName = item.Text ?? item.Value;
        }
    }

// Handle the unexpected case that nothing is selected
if (String.IsNullOrEmpty(displayName)) {
    if (Model == null) {
        displayName = String.Empty;
    }
    else {
        displayName = Model.ToString();
    }
}

@Html.DisplayTextFor(model => displayName)
}
else {
    // This Enum type is not supported.  Fall back to the text.
    @Html.DisplayTextFor(model => model)
}

Priority.cshtml(编辑模板)

    @model Priority

<select class="selectpicker" name="@ViewData.TemplateInfo.GetFullHtmlFieldName("")">
    @foreach (Priority e in Enum.GetValues(Model.GetType())) {
        <option value="@e"
                @if (e == Model) {
                    <text>selected</text>
                }
                data-icon="@{
                     switch (e) {
                         case Priority.Low:
                             <text>glyphicon-arrow-down</text>
                             break;
                         case Priority.High:
                             <text>glyphicon-arrow-up</text>
                             break;
                         case Priority.Critical:
                             <text>glyphicon-exclamation-sign</text>
                             break;
                         default:
                             break;
                    }
                }">
            @Html.DisplayFor(model => e, "Enum")
        </option>
    }
</select>

我想到的第一件事就是缓存。我从页面中删除了对显示模板的其他调用,但它仍然无效。

0 个答案:

没有答案