Использование того же частичного представления для редактирования и отображения - PullRequest
0 голосов
/ 31 июля 2011

Я хотел бы использовать один и тот же частичный вид для отображения и редактирования записи. Компоновка будет одинаковой для обеих функций и выглядит намного чище, чем частичное представление EditRecord и частичное представление DisplayRecord. Обслуживание будет намного проще, если у меня будет только одно частичное представление для обновления.

Я использую это прямо сейчас, и оно работает:

<div class="editor-label">
    @Html.LabelFor(model => model.FirstName)
</div>
<div class="editor-field">
    @if (@ViewBag.ViewMode == "display")
    {
        @Html.DisplayFor(model => model.FirstName)
    }
    else
    {
        @Html.EditorFor(model => model.FirstName)
    }
    @Html.ValidationMessageFor(model => model.FirstName)
</div>

Есть ли лучший способ сделать это?

Спасибо.

Ответы [ 4 ]

7 голосов
/ 31 июля 2011

Я настоятельно рекомендую использовать отдельные шаблоны редактирования и отображения.Попытка сделать их в единой форме делает их более запутанными и труднее поддерживать в долгосрочной перспективе.Разделение проблем - это мантра MVC, и вы пытаетесь объединить проблемы ..

1 голос
/ 31 июля 2011

мои 2 цента - использовать два частичных представления. я полагаю, что это обеспечивает лучшее разделение проблем, и если вы используете, скажем, бритву, то количество редактирования, которое вам нужно сделать при обновлении, минимально.

Я также считаю, что она представляет лучшую модель и обеспечивает лучшее разделение в вашем контроллере и выше.

0 голосов
/ 04 августа 2011

Недавно у меня было приложение, которое нуждалось в повторном использовании того же частичного представления.Идея заключалась в том, что пользователь будет видеть только отображаемую версию, если они не будут аутентифицированы, а затем сделает запрос на изменение данных.

Чтобы избежать большого утверждения IF, я использовал эквивалент EditorFor в обоих (MVC 3 на самом деле еще не вышел, поэтому у меня было еще немного работы для этого).Но ключ был в том, что «версия дисплея» отключала все со стороны сервера, если не были выполнены требования.

В обоих случаях внешний вид был редактором, но только один позволял вам редактировать.Я рекомендую подобную тактику для вас, если ваши требования не отличаются.

0 голосов
/ 31 июля 2011

Хотя я осознаю важность разделения проблем, я не думаю, что это единственный принцип современного программирования. А как насчет повторного использования кода?

Мне кажется, что наличие двух частичных представлений, которые практически идентичны, требует общего контроля (в данном случае общего частичного представления). Я должен сказать, что затраты на обслуживание, связанные с обновлением двух частичных представлений, перевешивают любые проблемы, возникающие из-за отсутствия разделения функций редактирования / отображения. Если я изменяю метку поля, добавляю / удаляю поле, меняю тип или длину, я должен помнить, чтобы сделать это в двух местах ... и убедиться, что я делаю это в обоих случаях одинаково.

Я полностью согласен с разделением интересов, за исключением того, что это кажется более важным на более высоком уровне. Держите слои представления / бизнеса / данных абсолютно раздельными. Кто хочет вернуться во времена Classic ASP? Однако я не могу себе представить, какие плохие вещи произойдут в результате добавления некоторых условий в частичное представление для повторного использования кода. Это грязно? Ну, немного, но все еще довольно читабельно, и цель очевидна. Думаю, причина, по которой я задал этот вопрос, заключалась в том, чтобы выяснить, есть ли у кого-то более чистый способ реализации повторного использования кода, чем с условными выражениями.

Кто-нибудь согласен с тем, что в этом случае повторное использование кода перевешивает выгоду разделения проблем? Если так, есть ли лучший способ реализовать это?

Спасибо

...