代码之家  ›  专栏  ›  技术社区  ›  Jronny

如何以编程方式将控件添加到母版页的内容占位符

  •  2
  • Jronny  · 技术社区  · 16 年前

    在base.master上:

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

    在default.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。。。如何以编程方式将控件添加到母版页的内容占位符?

    谢谢

    1 回复  |  直到 16 年前
        1
  •  7
  •   Jronny    16 年前

    已答复供将来参考

    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;
            }
        }
    }
    
    推荐文章