Как управлять областями MVC и RenderAction в разных контроллерах?
Я только что добавил новую область Admin в мой проект, так как ее начало становиться довольно большим, и я хочу сохранить его структурированным.
У меня есть представление _ViewStart.cshtml, которое устанавливает общую страницу макета для включения меню и частичной части с некоторой информацией пользователя. Поскольку это не было добавлено на моей странице области, я добавил файл _ViewStart в свою область.
Этот файл устанавливает макет в "~/Views/Shared/_Layout.cshtml", который находится за пределами моей области администрирования.
Однако файл _Layout содержит метод RenderAction(), который вызывает метод Child action для контроллера для рендеринга. Проблема заключается в том, что область, похоже, не обладает видимостью этого контроллера и поэтому исключает следующее:
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
Вы можете указать область как часть RouteValueDictionary (или просто объект значений маршрута), который RenderAction принимает в качестве третьего параметра в вашем случае:
Html.RenderAction("UserInfo", "Account", new { area = "" });
Предполагается, что контроллер учетной записи находится в корневой области.
Ответ 2
Вы можете использовать @Html.Action для частичного отображения, передавая значения параметров, если это необходимо.
@Html.Action("ActionName", "ControolerName", new { firstParam = "a", SecondParam = "b",.... })