Во-первых, это, вероятно, понятно, но давайте скажем так: бизнес-логика категории (например, выборка данных из источника данных) не должна быть в Html-помощнике или в пользовательском элементе управления: это должно быть сделано в контроллере.
Разница между 1) RenderPartial / HtmlHelper и 2) RenderAction находится в , который контролирует эту бизнес-логику:
- в одном действии контроллера, которое выполняет всю страницу или
- в отдельном действии контроллера, относящемся к частичному представлению.
Если вы используете данные своей категории почти на каждой странице, я не считаю неправильным извлекать их для каждой страницы на уровне действий контроллера страницы и передавать их в данные представления. Конечно, вы бы использовали некоторый механизм (пользовательский базовый класс модели, контроллер расширения, ...), чтобы у вас не было одинакового вызова функции извлечения категорий в каждом действии (при условии, что у вас есть много).
Если некоторые просмотры страниц предпочитают показывать категории, а некоторые нет, а некоторые, возможно, имеют другой элемент управления категориями с другой бизнес-логикой, тогда RenderAction определенно лучше. Даже в приведенном выше случае RenderAction хорош: он отделяет выборку категорий от других данных в действиях вашего контроллера.
Тогда использовать ли RenderPartial или HtmlHelper ... Для меня HtmlHelpers должен быть более общим и не специфичным для конкретного вида или модели, но это, я полагаю, скорее вопрос вкуса, чем ясное правило с точки зрения MVC: оба должны быть просто View-logic.