Прежде чем я вернусь к вопросу, позвольте мне немного рассказать об этом. Я пытаюсь разработать собственный механизм кэширования, который можно применять к пользовательским элементам управления. (Имейте в виду, что я знаю, что в .NET есть какой-то встроенный механизм кэширования). В зависимости от определенных флагов, установленных декларативно в разметке, элемент управления должен загрузить кэшированную версию своего ранее визуализированного содержимого или выполнить нормально (и если определенные флаги установлены, он должен генерировать кэш своего содержимого для следующей загрузки). Я хотел бы иметь возможность декларативно передавать некоторые флаги в разметке и иметь возможность проверить их значение в Page Init и, в зависимости от значения флага, определить, должен ли элемент управления загружать кэшированную версию или нет.
<uc:MyUC ID="N1" runat="server"
CacheProp='<%# SomeEnum.A | SomeEnum.B |SomeEnum.C %>'
PropA='<%# this.SomePropA %>'
PropB='<%# (this.SomePropB %>'
PropC='<%# this.SomePropC %>'
/>
Проблема, с которой я сталкиваюсь, заключается в том, что, насколько мне известно, я могу получить значение свойств, декларативно назначенных в разметке, только если я вызвал DataBind (). Однако я столкнулся с двумя проблемами:
Во-первых, вызов this.DataBind()
изнутри MyUC
вызовет привязку всех его дочерних элементов управления, что нарушит назначение кэша; также все пользовательские элементы управления были созданы таким образом, чтобы они не вызывали DataBind()
до того, как произошло событие LoadComplete
, чтобы убедиться, что родительские элементы управления, в которых они живут, выполнили свою инициализацию и вычислили свойства, которые декларативно передаются в дочерний пользовательский элемент управления (т. е. PropA
, PropB
, PropC
).
А теперь вопрос: есть ли способ связать свойство CacheProp
, чтобы получить его значение без привязки данных ко всем другим свойствам и без запуска привязки данных всех его дочерних элементов управления?
Спасибо за помощь!
Giuseppe