2010-11-10 79 views
3

我的內容頁面看起來是這樣的:內容控制不能從內容頁面訪問?

<%@ Page Language="C#" MasterPageFile="~/MasterPage.master" AutoEventWireup="true" CodeFile="Basket.aspx.cs" Inherits="Basket" Title="Untitled Page" %> 

<asp:Content ID="Content1" ContentPlaceHolderID="head" Runat="Server"> 
</asp:Content> 
<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server"> 
</asp:Content> 

現在,我想動態地添加一些控件,當頁面加載的內容,所以我想下面的代碼:

protected void Page_Load(object sender, EventArgs e) 
    { 
    Content2. // I want to add controls to it dynamically 
    } 

問題是編譯器不可見的Content2控件,我得到有關缺少指令或程序集引用的錯誤。

任何解決方案?

回答

8

的原因,你不能去那asp:Content控制一提的是,因爲當頁面與母版結合它不會呆在身邊。基本上ASP從這些asp:Content部分獲取所有控件,並使其成爲主頁面內的ContentPlaceholder控件的子項。

由於MSDN說:內容控件不會在運行時添加到控件層次結構中。相反,內容控件中的內容直接合併到相應的ContentPlaceHolder控件中。

這意味着如果您想要爲該部分添加更多控件,則必須在主頁面中獲取對ContentPlaceholder控件的引用並將它們添加到該控件中。喜歡的東西:

ContentPlaceHolder myContent = (ContentPlaceHolder)this.Master.FindControl("ContentPlaceHolder1"); 
myContent.Controls.Add(??); 

通知您使用的是ContentPlaceHolderID值,而不是asp:Content部分的ID

+0

謝謝,我將其標記爲答案。我可以理解它在運行時消失,但爲什麼我不能像其他控件一樣在設計時訪問它。如果我在WYSIWYG編輯器中看到該控件,那麼也應該可以在C#文件中訪問該控件。從我的角度來看,這是微軟提供的設計中的一個錯誤。 – Wodzu 2010-11-10 12:53:15

2

我會建議你在內容中放置一個佔位符控件,並用它來添加控件。例如,

<%@ Page Language="C#" MasterPageFile="~/MasterPage.master" AutoEventWireup="true" CodeFile="Basket.aspx.cs" Inherits="Basket" Title="Untitled Page" %> 

<asp:Content ID="Content1" ContentPlaceHolderID="head" Runat="Server"> 
    <asp:Placeholder runat="server" ID="Content1Controls" /> 
</asp:Content> 

.. 

而且

protected void Page_Load(object sender, EventArgs e) 
    { 
    Content1Controls.Controls.Add(... 
    } 
+0

+1對於好主意如何克服這個問題,謝謝:)但爲什麼內容控制本身無法訪問,這真的讓我感興趣。 – Wodzu 2010-11-10 09:21:23

+0

@Wodzu,那是因爲內容控件沒有被添加到頁面。查看patmortech更詳細的回覆。 – VinayC 2010-11-10 11:22:46