2010-09-29 68 views
10

好的,我是一個經驗豐富的Web開發人員,但有時ASP.Net欺騙我。 我在asp.net有一個母版頁。然後我有一個基於該母版頁(home.aspx)的頁面。現在在home.aspx.cs中,我想訪問asp:content控件以編程方式添加控件。訪問asp:內容代碼

.aspx的是這樣的:

<asp:Content ID="leftCol" ContentPlaceHolderID="cphLeftCol" Runat="Server"> 
    <asp:PlaceHolder ID="phLeftCol" runat="server"> 
    </asp:PlaceHolder> 
</asp:Content> 

我希望我可以從我的代碼中引用「leftCol」的背後。但它在那裏是未知的。 爲了測試,我添加了自己的佔位符「phLeftCol」。我可以參考沒有問題。

有什麼我看不到?

回答

17

您無法直接從您的代碼後面訪問asp:Content控件。內容控件在運行時不會添加到控件中,因此無法從後臺代碼訪問,以便在運行時添加控件。要在運行時向其添加控件,您需要將另一個容器控件添加到內容控件,並將控件添加到該控件(就像您對佔位符控件所做的那樣)。

查看此MSDN文章以獲取更多信息。

+1

所以,我的解決辦法是最好的實踐。多可惜。 – newtogit 2010-09-29 19:42:52

+0

還有其他容器控件可能比佔位符控件更適合您的情況(您真的需要更多地瞭解您正在做什麼),但內容控件不是一個選項。 – 2010-09-29 19:45:11

+2

將每個ContentPlaceHolder(在母版頁上)和每個匹配的內容(內容頁)對象簡單地看作鏈接的相反端點,告訴主/內容渲染系統在母版頁中何處以及要嵌入什麼。母版頁上的每個ContentPlaceHolder只是指示在內容頁面中的每個相應內容對象中定義的內容的嵌入位置。由於這些對象僅用作關於何處/要嵌入內容的鏈接,因此它們就像主/內容呈現系統的元對象,因此它們不會成爲控件層次結構的一部分。 – Triynko 2011-07-25 14:33:20

1

您無法從主頁代碼隱藏中訪問「leftCol」控件,因爲它是該頁面內容的持有者,並且代碼您的主頁在注入時不知道其內容......您只能該內容中的訪問控制。內容注入進去,從下向上asp.net,讓你的主頁的內容,在標籤<asp:Content ID="leftCol" ...> and </asp:Content>之間的這種情況下,一切,去母版頁中的佔位符...

歡呼