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编译器看不到该控件,并且我收到有关缺少指令或程序集引用的错误。

有什么解决办法吗?

4

2 回答 2

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

于 2010-11-10T10:04:05.637 回答
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(...
  }
于 2010-11-10T09:10:48.680 回答