18

我编写了一个 EnumDropDownFor() 助手,我想将它与 EditorFor() 一起使用。我才刚刚开始使用 EditorFor(),所以对如何选择模板有点困惑。

我的 Enum.cshtml 编辑器模板如下:

<div class="editor-label">
    @Html.LabelFor(m => m)
</div>
<div class="editor-field">     
    @Html.EnumDropDownListFor(m => m)
    @Html.ValidationMessageFor(m => m)
</div>

如果没有明确定义要使用的模板,是否有任何方法可以在将枚举传递给 EditorFor() 时使用默认模板?

4

1 回答 1

25

您可以查看 Brad Wilson 关于ASP.NET MVC 中使用的默认模板的博客文章。当您拥有 Enum 类型的模型属性时,它就是正在呈现的字符串模板。所以你可以像这样自定义这个字符串编辑器模板:

~/Views/Shared/EditorTemplates/String.cshtml

@model object
@if (Model is Enum)
{
    <div class="editor-label">
        @Html.LabelFor(m => m)
    </div>
    <div class="editor-field">     
        @Html.EnumDropDownListFor(m => m)
        @Html.ValidationMessageFor(m => m)
    </div>
}
else
{
    @Html.TextBox(
        "",
        ViewData.TemplateInfo.FormattedModelValue,
        new { @class = "text-box single-line" }
    )
}

然后在您看来:

@Html.EditorFor(x => x.SomeEnumProperty)
于 2011-04-16T08:30:58.303 回答