2010-12-03 53 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()。然而,我面临两个问题: 首先从MyUC内调用this.DataBind()将触发绑定其所有子控件,这将违背缓存的目的;也建立了所有用户控件,以便在LoadComplete事件触发之前不会调用DataBind(),因此为了确保它们所在的父控件已完成其初始化并计算了声明性传递给子用户控件的属性(即,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]); 
相关问题