Как мне управлять областями MVC и RenderAction на разных контроллерах? - PullRequest
31 голосов
/ 12 сентября 2011

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

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

Этот файл устанавливает макет на «~ / Views / Shared / _Layout.cshtml», чтоза пределами моей админки.Однако файл _Layout включает метод RenderAction () , который вызывает метод действия Child на контроллере для рендеринга.Проблема в том, что область, по-видимому, не имеет видимости этого контроллера и поэтому выдает следующее исключение:

The controller for path '/Admin/LeadOrigin' was not found or does not implement IController.

Точка, где это произошло, находится здесь:

Line 70:         <div id="logindisplay">
Line 71:             @{
Line 72:                 Html.RenderAction("UserInfo", "Account");              
Line 73:             }
Line 74:         </div>

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

Есть идеи, как обойти эту проблему?

1 Ответ

58 голосов
/ 12 сентября 2011

Вы можете указать область как часть RouteValueDictionary (или просто объект значений маршрута), который RenderAction принимает в качестве третьего параметра в вашем случае:

Html.RenderAction("UserInfo", "Account", new { area = "" });  

Это предполагает, что контроллер Account находится вкорневая зона.

...