Мне нравится использовать RenderAction
дополнительный метод на HtmlHelper
возразите для рендеринга боковых панелей и т.п. на страницах, поскольку это позволяет мне сохранять код доступа к данным для каждой такой части в отдельных методах для контроллера. Используя абстрактную основу контроллера, я могу определить "стратегию боковой панели по умолчанию", которая может затем быть усовершенствована путем переопределения метода в конкретном контроллере, при необходимости.
Единственная "проблема", которую я имею с этим подходом, то, что RenderAction
создается способом, где это всегда создает экземпляр новостей класса контроллера, представляя действия от контроллера уже в действии. Некоторые мои контроллеры выполняют в некотором поиске данных их Initialize
метод и использование RenderAction
метод в представлении заставляет это несколько раз происходить в том же запросе.
Есть ли некоторая альтернатива RenderAction
который снова использует объект контроллера, если метод действия, который будет вызван, будет на том же классе контроллера как "родительское" действие?
Вы можете вызовите this. [ActionName] в вашем контроллере.
например this.Index () в методе действия About домашнего контроллера вызовет рендеринг представления Index без повторной инициализации контроллера. Однако это будет работать только для всей страницы.
RenderPartial будет работать для вас, но вы должны убедиться, что «элементы» (боковые панели и т. Д.) Имеют все данные, которые им нужны в родительской модели представления.
например, RenderPartial («SideBars», ViewData.Model) . Если ваша ViewModel содержит все, что вам нужно для частичных изображений, их можно добавить поверх общих представлений, и вашему контроллеру потребуется только настроить начальное ViewMoel.
Kindness,
Dan