2012-06-07 2 views
2

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

Session["CurrentAccount"] = new Account(tb_username.text, tb_password.text); 

И хотите извлечь эти данные на другой странице, как это:

Account currAccount = (Account)Session["CurrentAccount"]; 

Всякий раз, когда я пытаюсь это сделать , возникает ошибка nullreference. Класс Account не помечен как сериализуемый. И обе страницы работают под одним и тем же приложением.

Редактировать: Я попытался сделать то же самое, но вместо этого привязал регулярную строку к сеансу, это тоже не сработало.

+0

Являются ли обе страницы работающими под одним и тем же контекстом приложения или виртуальным каталогом? – kprobst

+1

«Учетная запись» отмечена как «Сериализуемая»? Вы должны поделиться своим ключом 'sessionState' с web.config. – SliverNinja

+0

Является ли 'новая учетная запись (tb_username.text, tb_password.text);' орфографическая ошибка? Это должна быть «новая учетная запись (tb_username.Text, tb_password.Text)», иначе ваш код даже не должен компилироваться. – Icarus

ответ

2

Сериализуемый считается только для SQL сессии. Это приведет к возникновению исключения при помещении его в сеанс.

У меня была такая же проблема, когда прямо присваивалась сессия «новому объекту». Сначала попробуйте создать экземпляр, а затем назначьте экземпляр своей сессии!

+0

Сначала попытался создать экземпляр, но это тоже не помогло. Такая же ошибка. –

+0

Serializable также необходим для сеансов ASP StateServer. Теперь, когда я думаю об этом, «в памяти», скорее всего, единственный тип сеанса, который не требует Serializable. – mikemanne

+0

Serializable требуется только для SQL Server. Сервер SessionState также работает в памяти, но использует отдельный процесс для поддержки веб-фермирования. См. Http://msdn.microsoft.com/en-us/library/ms178586.aspx – martijnvanschie

-3

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

TL; DR Вы, по-видимому, не можете хранить объекты, отличные от стандартных, в сеансе.

+0

, так что вы говорите, что не можете заполнить сеанс пользовательским объектом, таким как учетная запись?Я знаю, что это неверно, я заполнил много сеансов пользовательскими объектами. Я сам воспроизвел ваш вопрос, и я не получил никаких ошибок. Поэтому я думаю, что он должен что-то делать с настройками на вашем конце. – Thousand

+0

Вы действительно можете это сделать. Что-то просто мешает ему нормально работать в вашей среде. Скорее всего, это проблема сериализации. – AaronS

+0

http://blog.felipel.com/2009/08/how-to-enable-session-state-in-asp-net/ просмотрите этот блог, возможно, его что-то связанное с этим – Thousand

Смежные вопросы