Как включить ViewState для дочерних пользовательских элементов управления, если они отключены в родительском?

Я пытаюсь создать настраиваемый элемент управления, похожий на элемент управления gridview, но специально для бизнес-объектов, реализующих определенные настраиваемые интерфейсы.

При этом я столкнулся со следующей проблемой.

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


person Bob Dizzle    schedule 06.10.2008    source источник


Ответы (3)


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

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

Свойство EnableViewState в любом контейнере переопределит поведение всех элементов управления в этом контейнере.

Удачи!

EDIT: вы можете посмотреть свой метод CreateChildContols () и перечислить элементы управления, отключающие viewstate оттуда, для каждого из элементов управления в пользовательском элементе управления с помощью EnableViewState свойство.

person Jason Stevenson    schedule 06.10.2008
comment
Джейсон прав, как только он отключен над вами, вы не сможете включить его дальше. - person Tom; 06.10.2008

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

Т.е. вместо того, чтобы сказать:

this.ViewState["someKey"] = someValue;

сказать:

this.Page.ViewState["someKey"] = someValue;

Однако будьте осторожны - если у вас есть более одного экземпляра вашего элемента управления на странице, вам нужно убедиться, что они используют разные ключи!

person teedyay    schedule 10.02.2009

По-видимому, это возможно с помощью Asp.Net 4.0

person Johnny5    schedule 11.02.2011