2009-12-15 5 views
2

На base.master:как добавить элементы управления заполнителем содержимого Masterpage по программному

<%@ Master Language="C#" AutoEventWireup="true" CodeBehind="Base.master.cs" Inherits="WebApplicationControlTest.Base" %> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" > 
<head runat="server"> 
    <title>The title</title> 
    <asp:ContentPlaceHolder ID="head" runat="server"> 
    </asp:ContentPlaceHolder> 
</head> 
<body> 
    <form id="form1" runat="server"> 
    <div> 
     There is a content here: <br /> 
     <asp:ContentPlaceHolder ID="body" runat="server"> 
     </asp:ContentPlaceHolder> 
    </div> 
    </form> 
</body> 
</html> 

На вложенных мастерах

<%@ Master Language="C#" MasterPageFile="~/MasterPages/Base.Master" AutoEventWireup="true" CodeBehind="NestedMasterPageTest2.master.cs" Inherits="WebApplicationControlTest.MasterPages.NestedMasterPageTest2" %> 
<asp:Content ID="Content1" ContentPlaceHolderID="head" runat="server"> 
</asp:Content> 

<asp:Content ID="PlaceHolder" ContentPlaceHolderID="body" runat="server"> 
    This is inside the NestedPage<br /> 
    <asp:ContentPlaceHolder ID="PlaceHolderLeft" runat="server"> 
    </asp:ContentPlaceHolder> 
    <asp:ContentPlaceHolder ID="PlaceHolderRight" runat="server"> 
    </asp:ContentPlaceHolder> 
</asp:Content> 

и на default.aspx

<asp:Content ID="PlaceHolder" ContentPlaceHolderID="PlaceHolderLeft" runat="server"> 
    This is a test! 
</asp:Content> 

по умолчанию .aspx.cs

protected override void OnPreInit(EventArgs e){ 
    Control control = LoadControl("TheUrlOfTheControl.ascx"); 
    if (Page.Master.FindControl("body") != null) { 
     Page.Master.FindControl("body").Controls.Add(control); 
    } 
} 

Мне нужно добавить элемент управления в последнюю часть содержимого тела. Заполнитель, но FindControl возвращает null ... как мы можем программным образом добавить элементы управления к содержимому заполнителя главной страницы?

Благодаря

ответ

7

Ответил на будущее

protected override void OnPreInit(EventArgs e){ 
    Control control = LoadControl("TheUrlOfTheControl.ascx"); 
    Control placeHolderControl = Page.FindControl("body"); 
    if (placeHolderControl != null) { 
     placeHolderControl.Controls.Add(control); 
    } else { 
     MasterPage theMaster = Page.Master; 
     while (theMaster != null) { 
      placeHolderControl = theMaster.FindControl("body"); 
      if (placeHolderControl != null) { 
       placeHolderControl.Controls.Add(control); 
       break; 
      } 
      theMaster = theMaster.Master; 
     } 
    } 
} 
+0

Спасибо, это работа для меня. , но я поставил этот код на событие загрузки главной страницы, есть ли разница в загрузке страницы и загрузке главной страницы? – sharad

+0

Как работает метод LoadControl в коде? Требуется ли добавить ссылку на использование этого метода? –

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