2010-01-29 5 views
1

Я добавил один datalist в поле зрения государства, как:добавление DataList в ViewState

ViewState["datalist"] = dtlstForm; 

и извлекаться как:

DataList lis = (DataList)ViewState["datalist"]; 

тогда folowing ошибка приходит:

типа «System .Web.UI.WebControls.DataList 'в Assembly' System.Web, Version = 2.0.0.0, Culture = neutral, PublicKeyToken = b03f5f7f11d50a3a 'is не обозначен как сериализуемый.

+1

Заданный вопрос: «Почему» вы хотите поместить этот элемент управления в ViewState? Чего вы пытаетесь достичь, делая это? –

+0

Могу ли я спросить, почему вы кладете DataList в ViewState? DataList - это элемент управления, и в ASP.NET есть совершенно хорошая иерархия Controls. –

ответ

1

Вы не можете поместить объект в viewstate, если он не реализует ISerializable. Видоискатель сериализуется до его отправки клиенту.

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

Является ли справочник вашего собственного класса? Если это так, вы могли бы также реализовать ISerializable, но я бы не пошел по этому маршруту, если бы мог просто ввести сеанс.

+0

DataList = System.Web.UI.WebControls.DataList, а не собственный класс OP. –

+0

SessionState будет работать только в том случае, если он установлен в InProc (в процессе) и хранится в памяти приложений. Если вы используете государственный сервер или сервер Sql для хранения состояния сеанса, то любые объекты, хранящиеся в сеансе, также должны быть сериализованы. –

3

Класс DataList не является сериализуемым (SerializableAttibute не установлен на нем и не реализует интерфейс ISerializable).

Это означает, что .NET framework не может сериализовать его и поместить в ViewState.

Поскольку это встроенный класс, его нельзя модифицировать для сериализации.

Как ожидается, в DataList будет храниться довольно много информации, поэтому включение в ViewState приведет к тому, что ViewState будет огромным, что повлияет на производительность, поэтому имеет смысл не сериализовать его.

Возможно, вы можете переосмыслить информацию, необходимую для размещения в ViewState, и вложить в нее небольшую сумму (например, список идентификаторов).

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