2010-12-03 52 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]); 
相關問題