Как HTML. RenderAction (), но не повторно инстанцируя объекта контроллера

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

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

Есть ли некоторая альтернатива RenderAction который снова использует объект контроллера, если метод действия, который будет вызван, будет на том же классе контроллера как "родительское" действие?

6
задан Jørn Schou-Rode 13 December 2009 в 13:21
поделиться

1 ответ

Вы можете вызовите this. [ActionName] в вашем контроллере.

например this.Index () в методе действия About домашнего контроллера вызовет рендеринг представления Index без повторной инициализации контроллера. Однако это будет работать только для всей страницы.

RenderPartial будет работать для вас, но вы должны убедиться, что «элементы» (боковые панели и т. Д.) Имеют все данные, которые им нужны в родительской модели представления.

например, RenderPartial («SideBars», ViewData.Model) . Если ваша ViewModel содержит все, что вам нужно для частичных изображений, их можно добавить поверх общих представлений, и вашему контроллеру потребуется только настроить начальное ViewMoel.

Kindness,

Dan

1
ответ дан 17 December 2019 в 22:13
поделиться
Другие вопросы по тегам:

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