Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
210
Добавлен:
10.05.2015
Размер:
20.41 Mб
Скачать

6.2.3. Состояние просмотра ViewState

Веб-элементы управления ASP.NET используют состояние просмотра по умолчанию. Оно позволяет им сохранять их свойства между отправками данных (postback). С помощью свойства ViewState можно добавить в коллекцию состояния просмотра свои собственные данные. В частности, можно здесь хранить простые типы данных и свои собственные специальные объекты.

Как и в основе большинства опций для управления состоянием в ASP.NET, в основе состояния просмотра лежит коллекция типа словаря, где каждый элемент индексируется с помощью уникального строкового имени. Например:

ViewState["CurrentPage"] = 3;

Этот код помещает в коллекцию ViewState значение 3 (или, скорее, целое число, которое содержит значение 3) и присваивает ему описательное имя CurrentPage. Если в коллекции ViewState на текущий момент нет элемента с именем CurrentPage, в нее будет автоматически добавлен такой новый элемент. Если элемент с таким именем уже существует, он будет заменен.

При извлечении значения следует использовать имя ключа. Помимо этого, также следует привести извлекаемое значение к соответствующему типу данных. Этот дополнительный шаг является обязательным, потому что коллекция ViewState сохраняет (хранит) все элементы в виде объектов обобщенного типа, что позволяет ей иметь дело со многими различными типами данных.

Ниже показан код, который извлекает значение CurrentPage и преобразовывает его в целое число:

int counter;

if (ViewState["CurrentPage"] != null)

{

counter = (int)ViewState["CurrentPage"];

}

При попытке отыскать значение, которого нет в коллекции, будет выдано исключение NullReferenceException. Чтобы исключить возможность возникновения такой ситуации, прежде чем пытаться извлечь и привести к определенному типу данные, которых может и не быть, следует выполнить проверку на наличие значения null.

6.2.3.1. Сохранение объектов в состоянии просмотра

В состоянии просмотра можно сохранять свои собственные объекты, причем так же легко как числовые и строковые типы. Однако чтобы элемент был сохранен в состоянии просмотра, ASP.NET должен быть способен преобразовать его в поток байтов для того, чтобы он мог быть добавлен в скрытое поле для ввода данных на странице. Этот процесс называется сериализацией. Если объекты не поддаются сериализации (а по умолчанию это именно так), при попытке поместить их в состояние просмотра, появится сообщение об ошибке.

Чтобы сделать объекты пригодными для сериализации, следует просто добавить перед объявлением соответствующего класса атрибут Serializable. Например, ниже показан чрезвычайно простой класс BookPage:

[Serializable]

public class BookPage

{

public int PageNamber;

public string Text;

public Customer(int pageNamber, string text)

{

PageNamber = pageNamber;

Text = text;

}

}

Поскольку класс BookPage помечен как пригодный для сериализации/поддающийся сериализации, он может быть сохранен в состоянии просмотра:

BookPage page = new BookPage (3, "Понедельник начинается в субботу");

ViewState["CurrentPage"] = page;

Не забывайте о том, что когда используются специальные объекты, при извлечении из состояния просмотра данные обязательно должны приводиться к какому-нибудь типу:

BookPage cust = (BookPage)ViewState["CurrentPage"];

Чтобы класс поддавался сериализации, он должен отвечать следующим требованиям:

  • он должен иметь атрибут Serializable;

  • все порождаемые от него классы тоже должны иметь атрибут Serializable;

  • все индивидуальные переменные этого класса должны представлять собой поддающиеся сериализации типы данных, а все не поддающиеся сериализации типы данных должны сопровождаться атрибутом NonSerialized (во время процесса сериализации они будут просто игнорироваться).