Уменьшите повторение в представлениях Asp.net MVC Razor - PullRequest
2 голосов
/ 01 января 2012

Я создаю бизнес-приложение LOB с использованием ASP.NET MVC. В моих взглядах я нахожу эту модель многократно повторяемой:

<div class="editor-label">
    @Html.LabelFor(model => model.Name)
</div>
<div class="editor-field">
    @Html.EditorFor(model => model.Name)
    @Html.ValidationMessageFor(model => model.Name)
</div>

Должна быть возможность написать помощника, чтобы уменьшить его до что-то вроде этого:

@EditorForField(model => model.Name)

Это упростит представления и упростит изменение макета формы на макет на основе таблицы (при необходимости)

Есть идеи, как сделать такой вспомогательный метод?

Спасибо!

1 Ответ

2 голосов
/ 01 января 2012

Мне удалось сделать эту работу с помощью этого кода:

public static class HelperExtensions
{
    public static MvcHtmlString EditorForField<TModel, TValue>(
        this HtmlHelper<TModel> html, 
        Expression<Func<TModel, TValue>> expression)
    {
        const string template = @"<div class=""editor-label"">{0}</div><div     class=""editor-field"">{1}{2}</div>";

        string markup = string.Format(template, 
            html.LabelFor(expression), 
            html.EditorFor(expression),
            html.ValidationMessageFor(expression));

        return new MvcHtmlString(markup);
    }
}

По вашему мнению:

@Html.EditorForField(model => model.Name)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...