ASP.Net MVC 3 Отправка строки из метода HTTP-POST в _Layout.cshtml - PullRequest
0 голосов
/ 13 сентября 2011

Я пытаюсь адаптировать класс AccountController, чтобы он использовал мою собственную базу данных. Чтобы сделать это полностью, мне нужно отправить строку в _Layout.cshtml для проверки. Как это возможно?

Я пытался использовать ViewData, но для этого требуется, чтобы контроллер соответствовал приложенному представлению, например. AccountController для просмотра / Account / LogOn.cshtml будет работать.

Я считаю, что ViewBag работает так же, как я получаю нулевую ссылку, когда пытаюсь получить к ней доступ в _Layout.cshtml.

В данный момент мой код немного поврежден из-за попытки решить проблему, но вот что у меня есть. Надеюсь, это поможет объяснить лучше.

AccountController / [HTTP-POST] LogOn

...
if (user.GetRole(model.UserName).Equals("Admin"))
{
     ViewBag.Role = "Admin";
}
...

_Layout.cshtml

@if (Request.IsAuthenticated && ViewBag.Role.Equals("Admin"))
{
   ...
}

Больше не думаю, что это можно сделать с помощью ViewBag или ViewData (из-за комментариев). Любое решение будет приветствоваться.

Заранее спасибо - Анкоу

Ответы [ 2 ]

1 голос
/ 13 сентября 2011

Измените свой код на

if (user.GetRole(model.UserName).Equals("Admin"))
{
    ViewBag.Role = "Admin";
}
else{
    ViewBag.Role = "";
}

Вы получите сообщение об ошибке ViewBag.Role не существует. Поэтому он всегда должен быть установлен.

редактирует

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

@Html.RenderAction("LogonDisplay");

Это проверит роли, установит значения ViewBag, а затем отобразит при необходимости.

0 голосов
/ 13 сентября 2011

Возможно, вы используете _Layout до вызова действия Logon.Поэтому, проверьте ваш _Layout.

@if (Request.IsAuthenticated && ViewBag.Role != null && ViewBag.Role.Equals("Admin"))
{
   ...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...