ASP.NET MVC: использовать Html.Partial или Html.Action? - PullRequest
10 голосов
/ 13 декабря 2011

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

Мне интересно, как лучше всего отобразить это меню (определено вчастичное представление).

Насколько я знаю, я могу сделать это двумя способами, с некоторыми преимуществами и недостатками для каждого из них:

Использование Html.Action: + Он полностью независим от представлениякоторый использует макет - добавляет дополнительный запрос для рендеринга раздела страницы - я добавляю метод Action, который возвращает частичное представление, которое не вызывается из Ajax.

Using Html.Partial: +Простой запрос на рендеринг всего представления. Каждая модель представления должна содержать информацию, необходимую для навигационной панели

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

Спасибо!

1 Ответ

14 голосов
/ 13 декабря 2011

Я бы использовал Html.Action, особенно если это меню содержит некоторые динамические данные, которые извлекаются из базы данных.Преимущество состоит в том, что вы можете полностью отделить эту выборку в отдельном действии от основного.Кроме того, выходные данные дочерних действий можно кэшировать, украсив их атрибутом [OutputCache].Делая это, вы можете уменьшить нагрузку на вашу базу данных, если данные меняются не очень часто.

Добавлен дополнительный запрос для отображения раздела страницы

Вы, должно быть, что-то неправильно поняли об этом.Дополнительного запроса от клиента нет.Все подается в одном запросе.Существует дополнительное создание экземпляра контроллера и выполнение действия, но нет нового HTTP-запроса от клиента.Это как если бы 2 действия контроллера были выполнены в одном запросе, а их результат агрегирован в одну HTML-страницу, отправленную клиенту.

...