Android97
@Android97
Бэкенд и немного фронтенд разработчик

Как передать данные в Layout из Html.RenderAction?

Вот как я это представляю, но этот вариант не работает:
15cca0fe631a40e995d2539434749510.png
В GetUser.cshtml данные передаются, а вот из GetUser в layout нет, приходит пустой объект.
  • Вопрос задан
  • 376 просмотров
Решения вопроса 1
Oskar87
@Oskar87
Senior software engineer
Эх молодеж!
Ну если уж на то пошло, а почему пользователя нельзя передать во вью из контроллера другим способом?
Создать вьюмодель сделать в ней проперти CurrentUser и туда его положить, а потом вызвать @Model.CurrentUser

А если мы говорим как сделать правильно, то можно сделать так
1)Создай классы BaseViewPage BaseViewPagelt;T gt; отнаследуйся от WebViewPage и WebViewPage lt;T gt;
2)Потом добавь public property User в обе реализации класса BaseViewPage
3) Сделай сервис для того чтобы вытаскивать текущего пользователя
(к примеру из сессии берешь его email или id, по нему цепляешь из базы и отдаешь)
4) Вызови сервис из BaseViewPage и BaseViewPage lt;T gt;
Создаешь там инстанс сервиса, или инжектишь его туда, как больше нравится.
Потом достаешь пользователя.
К примеру так Public User CurrentUser {get{ return AuthServise.GetCurrentUser();}}

5) подмени во вью конфиге
lt; pages pageBaseType="System.Web.Mvc.WebViewPage" gt;
на
lt; pages pageBaseType="BaseViewPage" gt;

И будет у тебя в любом вью везде Пользователь текущий, счастье!
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@Free_ze
Пишу комментарии в комментарии, а не в ответы
У вас перепутана последовательность картиночек: Layout зовет экшн Auth-контроллера, а тот, в свою очередь, вызывает GetUser-вьюху и вставляет ее на место вызова в Layout (1 - 3 - 2)

Тем не менее, ViewBag- это индивидуальное свойство каждого контроллера (BaseController). То есть они разные для Auth-контроллера и того, который зовет Layout (назовем его X) и ваша задумка не прокатит.

Вы пытаетесь бизнес-логику вытащить на вьюхи.
Это нужно получать не с помощью отдельного экшна и вьюхи Auth-контроллера, а от сервиса (в который обернуть работу с базой). Затем протягивать этого через вью-модель экшна X-контроллера.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы