C# 枚举的DisplayTemplate不适用于某些值
我有一个名为Priority的枚举类模型。我有一个用于优先级的编辑器模板和一个用于枚举的显示模板。在编辑器模板中,我创建了一个下拉列表,列出所有可能的优先级值,并在文本旁边显示glyphicon 问题是,在编辑器模板中,对于C# 枚举的DisplayTemplate不适用于某些值,c#,asp.net-mvc,enums,asp.net-mvc-5,display-templates,C#,Asp.net Mvc,Enums,Asp.net Mvc 5,Display Templates,我有一个名为Priority的枚举类模型。我有一个用于优先级的编辑器模板和一个用于枚举的显示模板。在编辑器模板中,我创建了一个下拉列表,列出所有可能的优先级值,并在文本旁边显示glyphicon 问题是,在编辑器模板中,对于(e==Model)的情况,行@Html.DisplayFor(Model=>e,“Enum”)将不会调用显示模板,并且该选项只显示图标而不显示文本。调试时,它会通过该行,但不会传递到显示模板。对于其他选项,它运行良好 我的观点和模型如下: Priority.cs: publ
(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(显示模板):
Priority.cshtml(编辑器模板)
@型号优先级
@foreach(Enum.GetValues(Model.GetType())中的优先级e){
@DisplayFor(model=>e,“Enum”)
}
我首先想到的是缓存。我从页面中删除了对显示模板的其他调用,但它仍然不起作用
@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)
}
@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>