Сессия, вероятно, ваша лучшая ставка. Мы должны использовать сеанс для хранения некоторой пользовательской информации, но столкнулись с ошибкой из-за слишком раннего доступа к ней. Ошибка [HttpException]: Session state has created a session id, but cannot save it because the response was already flushed by the application."
Но она часто проявляется как PageRequestMangerParserErrorException. Супер весело охотиться на это. Одно хакерское исправление - записать в свой код Global.asax:
public Session_Start(object sender, EventArgs e)
{
string sessionId = Session.SessionID;
}
Доступ к SessionID заставляет механизм ASP.NET собирать сеанс раньше, чем обычно, что делает возможным его раннее использование.
Вне сеанса (или приложения) у вас есть два других варианта: клиентское хранилище и постоянное хранилище. Последний - это причудливый способ сказать «запихнуть в базу данных», хотя, конечно, существуют и аналогичные альтернативы.
Клиентское хранилище похоже на viewstate, но более управляемое. Вы можете использовать скрытые поля или куки. На самом деле, cookie может работать хорошо для вас, но вам нужно зашифровать информацию в нем, если вы хотите, чтобы пользователь оставил его в покое. В любом случае, все, что вы отправляете клиенту, должно быть скомпрометировано, поэтому всегда проверяйте достоверность.