Извлечение переменных сеанса в ASP.NET MVC 4 (бритва, просмотр)

Я написал много сайтов на PHP. Теперь я должен создать сайт с ASP MVC 4 (C#), и я застрял с сессиями.

IE пользователь должен перейти на страницу входа в систему, ввести свой логин и пароль. Если они правильные, в контроллере я устанавливаю сеанс с UserId, например так:

Session["UserId"] = 10

Это значение UserId используется для отображения PartialViews (форма входа в систему или (после входа в систему) некоторые меню приложения). Как я могу получить этот UserId внутри Razor view?

После этого в View:

if (Session.UserId == 10) { @Html.Partial("LoggedMenu") }

У меня есть исключение со Stackru.:/

3 ответа

Решение

Ты делаешь это неправильно...

Session[<item name>] возвращает строку, вы должны сравнить со строкой, или привести ее, так что либо (int)Session["UserId"] == 10 или же Session["UserId"] = "10",

Вы также вызываете свойство, которое не существует Session.UserId не будет существовать как Session это как NameValueCollection, вы вызываете его по запросу, это имя элемента.

в конце вы должны написать

@if (Session["UserId"] == "10") { 
    Html.Partial("LoggedMenu"); 
}

Вы говорите, что учитесь, поэтому я хотел бы отметить две быстрые вещи:

  • Вам следует воспользоваться курсом ASP.NET MVC, который бесплатно доступен на домашней странице http://asp.net/mvc (справа, когда вы читаете "Основные видео")
  • Создайте проект MVC3 и посмотрите, как они это делают, когда он будет готов из коробки с членством
@if (Session["UserId"] != null && Session["UserId"] == 10 ) { 
Html.Partial("LoggedMenu"); 
}

Кроме того: для управления идентификацией лучше использовать готовую систему членства

Ниже приведен пример:

контроллер:

    if (Session["pageInitCounter"] == null)
    {
        Session["pageInitCounter"] = 1;
    }
    else
    {
        int counter = Convert.ToInt32(Session["pageInitCounter"]);
        counter++;
        Session["pageInitCounter"] = counter;
    }

Посмотреть:

@Html.Hidden("pageInitCounter", Session["pageInitCounter"])

Javascript:

alert($("#pageInitCounter").val());
Другие вопросы по тегам