问题描述
||
我已经编写了一个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()时使用默认模板?
解决方法
您可以查看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\" }
)
}
然后您认为:
@Html.EditorFor(x => x.SomeEnumProperty)