#c# #asp.net #session #razor #webmatrix
#c# #asp.net #сессия #razor #webmatrix
Вопрос:
Я тестирую несколько вещей здесь, на базовой веб-странице, и я заметил кое-что очень странное. Я не уверен, следует ли ожидать такого поведения, но это заставляет меня задуматься…
Я знаю, что могу получить текущий идентификатор пользователя, вошедшего в систему в данный момент, вот так:
@WebSecurity.CurrentUserId
И просто чтобы посмотреть, как используются сеансы, я подумал, что просто сохраню (в качестве примера) CurrentUserId в переменной сеанса после входа пользователя в систему, вот так:
@Session["UserIDthing"] = @WebSecurity.CurrentUserId;
И затем на другой странице я просто вывожу идентификатор сеанса (который должен быть точно равен 1, потому что это мой идентификатор пользователя), вот так:
@Session["UserIDthing"]
Но вместо того, чтобы выводить «1», он выводит минус 1 «-1». Почему это происходит?
И просто чтобы убедиться, что я был прав насчет идентификатора пользователя, я вывел идентификатор пользователя с помощью:
@WebSecurity.CurrentUserId
И он отобразил правильный идентификатор, который равен всего лишь «1»
Ответ №1:
Вероятно, это не имеет ничего общего с Session
. Попробуйте сохранить @WebSecurity.CurrentUserId
каким-либо другим способом, чтобы убедиться, что CurrentUserId
значение действительно было установлено после входа пользователя в систему (возможно, записав его в файл или используя статическую переменную для тестирования).
Комментарии:
1. Спасибо! Вместо того, чтобы сохранять его в сеансе сразу после входа пользователя в систему, я сохраняю его в сеансе, когда они были перенаправлены на страницу учетной записи после входа в систему. Итак, вы правы, в то время он не был установлен. Спасибо 🙂 @Eben R.
Ответ №2:
Чтобы назначить переменную, вам нужен блок кода, а не блок вывода. Вы должны использовать:
@{ someVar = otherVar; }
Синтаксис, который вы используете:
@someVar = @otherVar;
переводится как (псевдокод):
Response.Write(HtmlEncode(someVar));
Response.Write(" = ");
Response.Write(HtmlEncode(otherVar));
Response.Write(";");
Кстати: Почему вы назначаете переменные сеанса в своем представлении. Это должно быть обязанностью контроллера.
Комментарии:
1. На веб-страницах нет таких понятий, как представления и контроллеры.
2. @Mike, я вижу, это веб-матрица. Я пытаюсь забыть подобные архитектуры.
3. Незнание вас никуда не приведет.