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

时间:2009-12-15 04:20:49

标签: master-pages findcontrol contentplaceholder

在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 个答案:

答案 0 :(得分: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;
        }
    }
}