代码之家  ›  专栏  ›  技术社区  ›  Wodzu

无法从内容页访问内容控件?

  •  3
  • Wodzu  · 技术社区  · 14 年前

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

    有什么解决办法吗?

    2 回复  |  直到 14 年前
        1
  •  8
  •   patmortech    14 年前

    你找不到参考资料的原因 asp:Content 控件是因为当页与母版页组合时,它不在周围。基本上,ASP从这些 asp:内容 ContentPlaceholder 母版页中的控件。

    MSDN 说: 在运行时,不会将内容控件添加到控件层次结构中。相反,内容控件中的内容直接合并到相应的内容占位符控件中。

    这意味着,如果要向该部分添加更多控件,则必须获取对 内容占位符 控件并将其添加到母版页中。类似于:

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

    ContentPlaceHolderID 价值,而不是 ID 章节。

        2
  •  2
  •   VinayC    14 年前

    我建议您在内容中放置一个占位符控件并使用它添加控件。例如,

    <%@ 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(...
      }