Контент-контроль не доступен со страницы контента?
Моя страница контента выглядит так:
<%@ 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(...
}