добавление данных в viewstate - PullRequest
1 голос
/ 29 января 2010

Я добавил один datalist в состояние просмотра как:

ViewState["datalist"] = dtlstForm;

и получил его как:

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

тогда появляется следующая ошибка:

Введите 'System.Web.UI.WebControls.DataList' в сборке 'System.Web, Версия = 2.0.0.0, Культура = нейтральная, PublicKeyToken = b03f5f7f11d50a3a 'is не помечен как сериализуемый.

Ответы [ 2 ]

3 голосов
/ 29 января 2010

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

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

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

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

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

1 голос
/ 29 января 2010

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...