2010-11-10 2 views
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 не отображается компилятором, и я получаю сообщение об отсутствии директивы или ссылки на сборку.

Любое решение?

ответ

8

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

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

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

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

Уведомление используется значение ContentPlaceHolderID, НЕ ID секции asp:Content.

+0

Спасибо, я отмечаю это как ответ. Я могу понять, что он исчезает во время выполнения, но почему я не могу получить доступ к нему во время разработки, как и другие элементы управления. Если я вижу этот элемент управления в редакторе WYSIWYG, то я также могу получить доступ к этому элементу управления в файле C#. С моей точки зрения, это ошибка в дизайне, совершенном Microsoft. – Wodzu

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(... 
    } 
+0

+1 Для хорошей идеи, как преодолеть проблему, спасибо :) Но почему сам контентный контроль недоступен, это действительно интригует меня. – Wodzu

+0

@Wodzu, thats, потому что Content control не добавляется на страницу. См. Более подробный ответ patmortech. – VinayC

Смежные вопросы