我有一个名为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>
我想到的第一件事就是缓存。我从页面中删除了对显示模板的其他调用,但它仍然无效。