Контент-контроль не доступен со страницы контента?

Моя страница контента выглядит так:

<%@ 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 ответа

Решение

Причина, по которой вы не можете получить ссылку на это asp:Content контроль, потому что он не остается, когда страница объединена с главной страницей. В основном ASP берет все элементы управления внутри этих asp:Content разделы и делает их детьми из ContentPlaceholder контролирует внутри мастер-страницы.

Как говорится в MSDN: элемент управления контентом не добавляется в иерархию элементов управления во время выполнения. Вместо этого содержимое в элементе управления Content напрямую объединяется с соответствующим элементом управления ContentPlaceHolder.

Это означает, что если вы хотите добавить больше элементов управления в этот раздел, вам нужно будет получить ссылку на ContentPlaceholder контролировать на главной странице и добавить их к нему. Что-то вроде:

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

Обратите внимание, что вы используете ContentPlaceHolderID значение, а не ID из asp:Content раздел.

Я рекомендую вам поместить элемент управления заполнителем в контент и использовать его для добавления элементов управления. Например,

<%@ 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(...
  }
Другие вопросы по тегам