Контент-контроль не доступен со страницы контента? - PullRequest
3 голосов
/ 10 ноября 2010

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

<%@ 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 ]

8 голосов
/ 10 ноября 2010

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

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

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

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

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

2 голосов
/ 10 ноября 2010

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

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