我有几个编辑器模板,其中出现了用于渲染枚举的相同代码,如本例所示:
@model OriginDto
@* This div is what I want to move to a specific editor template *@
<div class="form-group">
<label asp-for="Kind" class="control-label"></label>
<select asp-for="Kind" asp-items="Html.GetEnumSelectList<Origin.KindOfOrigin>()" class="form-control"> </select>
<span asp-validation-for="Kind" class="text-danger"></span>
</div>
<div class="form-group">
<label asp-for="Source" class="control-label"></label>
<input asp-for="Source" class="form-control" />
<span asp-validation-for="Source" class="text-danger"></span>
</div>
<div class="form-group">
<label asp-for="EntryDate"></label>
<input asp-for="EntryDate" class="form-control" type="date" />
<span asp-validation-for="EntryDate" class="text-danger"></span>
</div>
因此,我决定为Enum创建以下模板编辑器:
@model Enum
<div class="form-group">
<label asp-for="@Model" class="control-label"></label>
<select asp-for="@Model" asp-items="Html.GetEnumSelectList(Model.GetType())" class="form-control"></select>
<span asp-validation-for="@Model" class="text-danger"></span>
</div>
然后将之前的div替换为:
@Html.EditorFor(x => x.Kind)
但是当它呈现HTML时,存在一些差异。例如,标签为空:
<label class="control-label" for="Cpu_Origin_Kind"></label>
但是在原始模板中,它具有属性名称:
<label class="control-label" for="Cpu_Origin_Kind">Kind</label>
似乎属性名称未到达模板。实际上,在调试模板时检查“ this.ViewData.ModelMetadata.PropertyName”时,它为null。
我的问题是: