Подтвердить что ты не робот

ASP.NET MVC: экземпляр контроллера доступа из представления

Как я могу получить доступ к экземпляру контроллера из представления? Например. У меня есть HomeController, который затем возвращает мое представление Index. Внутри этого представления я хочу получить доступ к экземпляру HomeController, который создал представление. Как это сделать?

4b9b3361

Ответ 1

ViewContext.Controller, и вам нужно будет его отличить.

<% var homeController = ViewContext.Controller as HomeController; %>

Это покрывается несколькими дополнительными морщинами в post Asp.Net MVC: Как получить виртуальный url для текущего контроллера/просмотра?.

РЕДАКТИРОВАТЬ. Это добавить немного мяса к рекомендации Марка Зеемана о том, что вы сохраняете функциональность из представления настолько, насколько это возможно по-человечески. Если вы используете контроллер для определения разметки отображаемой страницы, вы можете использовать метод Html.RenderAction(actionName, controllerName). Этот вызов активирует действие, как будто это отдельный запрос и включает его представление как часть главной страницы.

Этот подход поможет обеспечить разделение проблем, потому что перенаправленный метод действия может сделать все тяжелое поднятие в отношении правил представления. Он должен будет вернуть Partial View для правильной работы в вашем родительском представлении.

Ответ 2

На мой взгляд, вы должны рассмотреть дизайн, в котором View не должен знать о контроллере. Идея состоит в том, что Контроллер имеет дело с запросом, вызывает в воображении Модель и передает эту модель в представление. В этот момент выполняется работа контроллера.

Я думаю, что это признак недостатка дизайна, если View должен знать что-либо о контроллере. Можете ли вы рассказать больше о том, что вы пытаетесь выполнить?

Я часто нахожу, что при работе с хорошо разработанными фреймворками (такими как структура MVC), если вам кажется, что фреймворк борется с вами, вы, вероятно, ошибаетесь в своей задаче. Это случилось со мной много, и, отступая назад и спрашивая себя, что это такое, что я действительно пытаюсь выполнить, часто приводит к новым представлениям.