ASP.NET MVC: Когда использовать пользовательские вспомогательные методы HTML по сравнению с HTML. RenderAction?

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

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

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

10
задан Gabe 10 February 2010 в 19:32
поделиться

4 ответа

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

Методы HtmlHelper:

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

Частичный рендеринг:

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

Действие рендеринга:

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

ViewData:

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

18
ответ дан 3 December 2019 в 18:33
поделиться

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

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

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

0
ответ дан 3 December 2019 в 18:33
поделиться

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

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

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

1
ответ дан 3 December 2019 в 18:33
поделиться

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

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

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

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

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

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

2
ответ дан 3 December 2019 в 18:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: