ASP.NET MVC: использование EditorFor () с шаблоном по умолчанию для перечислений - PullRequest
18 голосов
/ 16 апреля 2011

Я написал помощник 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>

Если не считать явного определения шаблона для использования, есть ли способ иметь шаблон по умолчанию, который используется при каждой передаче Enumв EditorFor ()?

1 Ответ

25 голосов
/ 16 апреля 2011

Вы можете просмотреть сообщение в блоге Брэда Уилсона о шаблонах по умолчанию , используемых в 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)
...