我的内容页面如下:
<%@ 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
控件,我收到有关缺少指令或程序集引用的错误。
任何解决方案?
答案 0 :(得分:8)
您无法获得对该asp:Content
控件的引用的原因是因为当页面与母版页组合时它不会保留。基本上,ASP从这些asp:Content
部分中获取所有控件,并使其成为母版页内ContentPlaceholder
控件的子项。
正如MSDN所述:内容控件未在运行时添加到控件层次结构中。相反,Content控件中的内容将直接合并到相应的ContentPlaceHolder控件中。
这意味着如果您要为该部分添加更多控件,则必须在母版页中获取对ContentPlaceholder
控件的引用并将其添加到该控件中。类似的东西:
ContentPlaceHolder myContent = (ContentPlaceHolder)this.Master.FindControl("ContentPlaceHolder1");
myContent.Controls.Add(??);
请注意,您使用的是ContentPlaceHolderID
值,而不是ID
部分的asp:Content
。
答案 1 :(得分: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(...
}