ASP.NET Server Control - возможно совместное использование Viewstate между элементами управления - PullRequest
0 голосов
/ 29 октября 2010

Если у меня есть главный «составной настраиваемый серверный элемент управления» с несколькими дочерними настраиваемыми элементами управления, возможно ли, чтобы главный элемент управления совместно использовал свое состояние просмотра с дочерними элементами управления, которые также являются настраиваемыми составными серверными элементами управления (все элементы управления являются составными пользовательскими элементами управления сервера)?

Чтобы еще немного расширить, скажем, у меня есть элемент управления Person , Адрес control, Телефон control и Notes control. Адрес , Телефон и Примечания могут существовать как независимые элементы управления или как часть элемента управления Персона . Поскольку каждый элемент управления отвечает за свое собственное состояние представления и хранит в нем необходимые данные, чтобы он мог выполнять рендеринг / обратную передачу и т. Д., В конечном итоге в состоянии просмотра возникает дублирование lage, поскольку элемент управления Person сохраняет все данные, а затем каждый дочерний элемент управления снова сохраняет свои собственные данные. Кроме того, чтобы еще больше усложнить ситуацию, элемент управления Person динамически добавляет дочерние элементы управления, поэтому можно добавить второй адрес / номер телефона / примечание и т. Д., Что может привести к еще большему состоянию просмотра (до 1 МБ).

В случае, когда все элементы управления Address / Phone / etc являются дочерними элементами элемента управления Person , я могу каким-то образом обмениваться общими данными представления состояния, поэтому я у вас нет 2/3/4 копий некоторых вещей в viewstate, и когда они не являются компонентами, просто действуйте как обычно?

У меня есть одна идея для решения, но его довольно неприятное imo, где я мог бы изменить элемент управления Person , выставить его представление или данные, а затем в дочернем элементе проверить элемент управления. иерархии, и если дочерний элемент управления является частью Person , не используйте его для собственного состояния просмотра, используйте открытое. Это потребует от меня переделки существующего кода, которого я бы предпочел избежать, если это возможно.

1 Ответ

1 голос
/ 29 октября 2010

Первый вопрос, который я хотел бы задать: «Сколько из этих данных вам действительно нужно хранить в ViewState?»Например, достаточно ли информации в типичном запросе страницы, чтобы иметь возможность перестроить всю информацию, которая есть в некоторых из этих элементов управления?

Я считаю, что ASP.NET обычно использует ViewState гораздо больше, чем мне действительно нужноэто, и если вы получаете 1MB viewstate, я подозреваю, что то же самое, вероятно, верно для вас.Я настоятельно рекомендую прочитать эту статью , чтобы получить более полное представление о том, как работает ViewState, что приводит к сохранению значений в ViewState и о том, как избежать его использования там, где это не нужно.Вы можете решить большую часть своей проблемы, просто выполнив больше работы, например, в Page_Init вместо Page_Load.

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