Как я могу прочитать свойства объекта, который я назначаю для Session в ASP.NET MVC? - PullRequest
0 голосов
/ 03 июня 2010

Я пытаюсь создать сеанс, в котором хранится информация об участниках, которую приложение может использовать для отображения определенной навигации и предоставления доступа к определенным страницам и функциям, относящимся к роли участника.

Мне удалось назначить мой MemberLoggedIn объект для сессии следующим образом:

    //code excerpt start...

    MemberLoggedIn loggedIn = new MemberLoggedIn();

    if (computedHash == member.Hash)
    {
        loggedIn.ID = member.ID;
        loggedIn.Username = member.Username;
        loggedIn.Email = member.Email;
        loggedIn.Superuser = member.Superuser;
        loggedIn.Active = member.Active;

        Session["loggedIn"] = loggedIn;
    }
    else if (ModelState.IsValid) {
        ModelState.AddModelError("Password", "Incorrect Username or Password."); 
    }

    return View();

Это прекрасно работает. Затем я могу отправить свойства Session["loggedIn"] в View следующим образом:

    [ChildActionOnly]
    public ActionResult Login()
    {
        if (Session["loggedIn"] != null)
            ViewData.Model = Session["loggedIn"];
        else
            ViewData.Model = null;
        return PartialView();
    }

В частичном представлении я могу ссылаться на данные сеанса, используя Model.Username или Model.Superuser.

Однако, похоже, это не работает в контроллере или в пользовательском фильтре действий. Есть ли способ получить эквивалент Session["loggedIn"].Username?

Ответы [ 2 ]

5 голосов
/ 03 июня 2010

Помните, что ASP.Net MVC использует оболочки вокруг статических синглетонов ASP.Net, таких как Application и Session Это необходимо для отделения кода от модуля и его тестирования вне конвейера ASP.Net.

Из фильтра действий используйте:

((MembershipUser)filterContext.HttpContext.Session["loggedIn"]).Username 

А внутри контроллера используйте:

((MembershipUser)ControllerContext.HttpContext.Session["loggedIn"]).Username
2 голосов
/ 03 июня 2010

Как это:

MemberLoggedIn user = (MemberLoggedIn)HttpContext.Session["loggedIn"];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...