ASP.NET MVC:使用EditorFor()和枚举的默认模板

ajb*_*ven 18 asp.net-mvc editorfor mvc-editor-templates asp.net-mvc-3

我编写了一个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>
Run Code Online (Sandbox Code Playgroud)

如果没有明确定义要使用的模板,是否有任何方法可以使用默认模板,只要将Enum传入EditorFor()?

Dar*_*rov 25

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

~/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" }
    )
}
Run Code Online (Sandbox Code Playgroud)

然后在你的视图中简单地说:

@Html.EditorFor(x => x.SomeEnumProperty)
Run Code Online (Sandbox Code Playgroud)

  • Guh我的意思是说`ViewData.ModelMetadata.ModelType`,因为如果它可以为空,IsEnum将返回false,因此您必须检查基础类型. (3认同)