ASP.NET MVC: когда использовать пользовательские вспомогательные методы HTML по сравнению с Html.RenderAction? - PullRequest
10 голосов
/ 10 февраля 2010

Для меня немного неясно, когда использовать пользовательский вспомогательный метод и когда использовать RenderAction, а также когда просто использовать ViewData вместо этого. Некоторые из их функций слегка перекрываются.

Например, если бы я создал панель навигации по категориям, я бы создал новый вспомогательный метод и поместил бы его в какое-то частичное представление? Сначала я хотя и делал это, но я читал в каком-то блоге, чтобы использовать вместо этого RenderAction. Я просто размышлял и мог использовать некоторую помощь не только с этим примером, но и в целом.

Предположим, что список категорий исходит из некоторого источника данных.

Ответы [ 4 ]

18 голосов
/ 10 февраля 2010

общие рекомендации, которым я следую:

Методы HtmlHelper:

  1. Используется для стандартизации разметки. Я использую помощники, чтобы убедиться, что в полях формы, кнопках ввода и тегах изображений используется согласованная разметка.
  2. Используется, когда результирующая разметка минимальна. Небольшие кусочки текста, разметка полей формы и т. Д. Я не использую помощников для рендеринга полных доменных объектов.
  3. Оперировать небольшим количеством дискретных аргументов. Если мне нужно перебрать коллекцию и что-то отобразить, это частично. Если мне нужно принять большое количество входных данных, это тоже частичное.
  4. Не содержит никакой бизнес-логики, только логика представления. Аргументы обычно являются объектами в области решения, а не в области бизнеса / проблемы.
  5. Обычно имеют очень общий охват и применяются к большим частям приложения.

Отображение частичного:

  1. Используется, когда я хочу разложить большое представление на более мелкие части. Модель должна быть подмножеством модели «основного» вида.
  2. Частичные виды часто используются только определенными контроллерами или областями.

Визуализация действия:

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

ViewData:

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

2 голосов
/ 10 февраля 2010

Во-первых, это, вероятно, понятно, но давайте скажем так: бизнес-логика категории (например, выборка данных из источника данных) не должна быть в Html-помощнике или в пользовательском элементе управления: это должно быть сделано в контроллере.

Разница между 1) RenderPartial / HtmlHelper и 2) RenderAction находится в , который контролирует эту бизнес-логику:

  1. в одном действии контроллера, которое выполняет всю страницу или
  2. в отдельном действии контроллера, относящемся к частичному представлению.

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

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

Тогда использовать ли RenderPartial или HtmlHelper ... Для меня HtmlHelpers должен быть более общим и не специфичным для конкретного вида или модели, но это, я полагаю, скорее вопрос вкуса, чем ясное правило с точки зрения MVC: оба должны быть просто View-logic.

1 голос
/ 10 февраля 2010

Я бы выбрал вспомогательные html-методы, когда сценарий соответствует следующим критериям:

  1. Аргументы не считаются модельными данными
  2. Это не должно генерировать чрезмерное количество разметки
  3. HTML может быть сгенерирован только с указанными ему аргументами

Если у вас есть вспомогательный метод html, использующий данные модели или у него много зависимостей, он, вероятно, лучше использовать как RenderPartial или RenderAction.

0 голосов
/ 10 февраля 2010

Я также новичок в использовании RenderAction

, но когда мне нужно загрузить данные для определенной части экрана, я теперь использую RenderAction

Идеально для загрузки облака тегов, которые отображаютсяна каждой странице, но данные не относятся к конкретной странице.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...