Как я могу получить доступ к экземпляру контроллера из представления? Например. У меня есть HomeController
, который затем возвращает мое представление Index
. Внутри этого представления я хочу получить доступ к экземпляру HomeController
, который создал представление. Как это сделать?
ASP.NET MVC: экземпляр контроллера доступа из представления
Ответ 1
ViewContext.Controller, и вам нужно будет его отличить.
<% var homeController = ViewContext.Controller as HomeController; %>
Это покрывается несколькими дополнительными морщинами в post Asp.Net MVC: Как получить виртуальный url для текущего контроллера/просмотра?.
РЕДАКТИРОВАТЬ. Это добавить немного мяса к рекомендации Марка Зеемана о том, что вы сохраняете функциональность из представления настолько, насколько это возможно по-человечески. Если вы используете контроллер для определения разметки отображаемой страницы, вы можете использовать метод Html.RenderAction(actionName, controllerName)
. Этот вызов активирует действие, как будто это отдельный запрос и включает его представление как часть главной страницы.
Этот подход поможет обеспечить разделение проблем, потому что перенаправленный метод действия может сделать все тяжелое поднятие в отношении правил представления. Он должен будет вернуть Partial View для правильной работы в вашем родительском представлении.
Ответ 2
На мой взгляд, вы должны рассмотреть дизайн, в котором View не должен знать о контроллере. Идея состоит в том, что Контроллер имеет дело с запросом, вызывает в воображении Модель и передает эту модель в представление. В этот момент выполняется работа контроллера.
Я думаю, что это признак недостатка дизайна, если View должен знать что-либо о контроллере. Можете ли вы рассказать больше о том, что вы пытаетесь выполнить?
Я часто нахожу, что при работе с хорошо разработанными фреймворками (такими как структура MVC), если вам кажется, что фреймворк борется с вами, вы, вероятно, ошибаетесь в своей задаче. Это случилось со мной много, и, отступая назад и спрашивая себя, что это такое, что я действительно пытаюсь выполнить, часто приводит к новым представлениям.