asp.net核心编辑器模板:属性名称为null

时间:2018-09-23 08:36:25

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

我有几个编辑器模板,其中出现了用于渲染枚举的相同代码,如本例所示:

@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。

我的问题是:

  1. 为什么属性名称未到达此模板?
  2. 这种方法错误吗?如果是这样,欢迎提供任何提示。

0 个答案:

没有答案