Как сохранить значение списка глобальных переменных после обратной передачи


Я сначала посмотрел на этот вопрос: сохранить значение после обновления страницы. Но похоже, что это не работает с коллекциями, потому что ViewState хранит только одно значение. Мне нужно использовать коллекцию, потому что я не знаю, сколько экземпляров объекта создаст пользователь. Таким образом, отображение не вариант. Я также пытался использовать статические переменные, но он хранит значения дольше, чем мне нужно (я нашел объяснение этому здесь: http://social.msdn.microsoft.com/Forums/en/csharpgeneral/thread/3664cd62-46c7-4098-88a7-c09647673096).

Я был бы чрезвычайно признателен вам за помощь.
3 3

3 ответа:

Экземпляр List можно сохранить в клиентском сеансе на стороне сервера. Тогда по каждому запросу вы будете иметь доступ к списку в сеансе.

Тем не менее, вы все еще можете использовать viewstate, пока элементы в вашем списке сериализуемы.

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

Код может выглядеть примерно так.

private ArrayList GlobalList
{ 
  get 
  { 
     return ViewState["GlobalList"]; 
  } 
  set 
  { 
    ViewState["GlobalList"] = value; 
  } 
} 

Часто использование состояния сеанса лучше для объектов lare, но вы также можете хранить любые сериализуемые объекты в ViewState ( http://msdn.microsoft.com/en-us/library/ms972976.aspx ).

Примечание: пожалуйста, избегайте использования хранения данных в статических свойствах в ASP.Net поскольку значения являются общими для всех запросов. Примечание на примечании-HttpContext.Тока не статические объекты (ТВ-запросов к объектам).

Вы можете использовать переменную уровня класса, которая содержит значение после post, если вы хотите использовать список, сделайте его переменной уровня класса, тогда он не потеряет значение.