开发者

how to add controls to the masterpage's content placeholder programmatically

On the 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>

On the nested master

<%@ Master Language="C#" MasterPageFile="~/MasterPages/Base.Master" AutoEventWireup="true" CodeBehind="NestedMasterPageTest2.master.cs" Inherits="WebApplicationControlTest.MasterPages.NestedMasterPageTest2" %>
<asp:Content ID="Content1" ContentPlaceHolderID="h开发者_如何学JAVAead" 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>

and on the default.aspx

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

on the 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);
    }
}

I need to add the control to the last part of the body content Placeholder but FindControl does return null... how can we add controls to the masterpage's content placeholder programmatically?

Thanks


Answered for future reference

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

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜