2009-03-04 43 views
1

我想在調用控件的CreateChildControls方法之前在自定義Web控件上設置屬性。原因是,在那裏執行了很多邏輯,這取決於所討論的財產的價值。我可以直接使用HTML中的顯式值設置屬性,並及時提取屬性,但這對我來說沒用,因爲它需要基於服務器端變量。在調用CreateChildControls之前在控件上設置屬性

棘手的是,EnsureChildControls方法是從控件的「CONTENTS」屬性的getter中調用的,該屬性對應於ASPX文件中的標籤。例如。;

<myControl> 
<content> 
... 
</content> 
</myControl> 

據我所知,這反過來又觸發重寫CreateChildControls方法,使邏輯不爲我試圖設置該屬性正確的值執行。

我正在努力解決的是,在我的頁面的ASP.NET生命週期中,我可以設置屬性,以便在.NET訪問「CONTENT」屬性的getter之前設置屬性我的控制?

我試過在父頁上的OnPreInit,但仍然是在控件的CreateChildControls之後被擊中。我也不想改變控制本身,因爲它是一個通用控件,我不想特殊情況下爲這個特殊情況。

任何人有任何想法,我可以設置我的財產價值,所以它是按照我試圖實現的順序拾起的?

回答

3

從我的測試來看,如果不修改這種情況下的網頁控制,這是不可能的。當分析一個Web表單時,在TemplateControl.FrameworkInitialize方法中創建了所有在html中定義的控件,這包括調用任何內部屬性的get訪問器。不幸的是,在ProcessRequest中調用了FrameworkInitialize,它在ProcessRequestMain之前,它控制着頁面生命週期的其餘部分。

您可以重寫FrameworkInitialize,但只能在Web控件創建之前或設置屬性後才能訪問Web控件。

我一直髮現this image在試圖破譯頁面生命週期時非常有用。

+0

非常有幫助的答案,謝謝。 – 2009-03-05 15:38:15

相關問題