2010-12-03 6 views
1

Прежде чем я перейду к вопросу, позвольте мне немного рассказать об этом. Я пытаюсь разработать собственный механизм кэширования, который я могу применить к пользовательским пользовательским элементам. (Имейте в виду, что я знаю, что в .NET есть встроенный механизм кеширования). В зависимости от определенных флагов, объявленных декларативно в разметке, элемент управления должен загружать кэшированную версию ранее обработанного содержимого или выполнять нормально (и если определенные флаги установлены, он должен генерировать кеш его содержимого для следующего загружаемого момента). Я хотел бы иметь возможность передавать определенные флаги декларативно в разметке и проверять их значение в Page Init и, в зависимости от значения флага, определять, должен ли элемент управления загружать кешированную версию или нет.Возможно ли «DataBind» создать одно свойство пользовательского элемента управления?

<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, чтобы получить его значение без привязки данных ко всем другим свойствам и без инициирования привязки данных всех его дочерних элементов управления?

Спасибо за помощь!

Джузеппе

+0

Я начинаю считать, что это не возможно! :( – 2010-12-03 20:56:00

ответ

0

Это должно работать: за

<uc:MyUC ID="N1" runat="server" CacheProp="A|B|C"... >

Код:

strRawValue = N1.Attributes["CacheProp"]; 
string[] arrValues = strRawValue.Split('|'); 
SomeEnum value = (SomeEnum)Enum.Parse(typeof(SomeEnum), arrValues[0]); 
for (int i = 1; i < arrValues.Length; i++) 
    value |= (SomeEnum)Enum.Parse(typeof(SomeEnum), arrValues[i]); 
Смежные вопросы