2009-12-14 162 views
0

功能如何以編程方式設置masterpage?

private void SetUpMasterPage(){ 
    this.MasterPageFile = "~/MasterPages/NestedMasterPageTest2.Master"; 
} 

被呼籲OnPreInit ...這工作時的MasterPageFile是基母版...但是我們怎樣使它的嵌套母版的工作?

我們真的試圖

this.Master.MasterPageFile = "~/MasterPages/Base.Master"; 

但它拋出一個異常... =(


所以,爲了讓事情更清晰,在對的ASPX

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="Test._Default"%> 
<asp:Content ID="testContent" ContentPlaceHolderID="body" runat="server"> 
This is a test! 
</asp:Content> 

Master.Master

<%@ Master Language="C#" AutoEventWireup="true" CodeBehind="Base.master.cs" Inherits="Test.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> 
     <asp:ContentPlaceHolder ID="body" runat="server"> 
     </asp:ContentPlaceHolder> 
    </div> 
</form> 
</body> 
</html> 

,並在default.aspx.cs

protected override void OnPreInit(EventArgs e){ 
    this.MasterPageFile = "~/MasterPages/Base.Master"; 
} 

這是工作...


但是當我使用一個nested master page

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

<asp:Content ID="Content2" ContentPlaceHolderID="body" runat="server"> 
</asp:Content> 

再變default.aspx.cs

protected override void OnPreInit(EventArgs e){ 
    this.MasterPageFile ="~/MasterPages/NestedMasterPageTest2.Master"; 
} 

,我改變了Default.aspx的

<asp:Content ID="testContent" ContentPlaceHolderID="Content2" runat="server"> 
This is a test which uses a nested master page! 
</asp:Content> 

它返回說Cannot find ContentPlaceHolder 'Content2' in the master page '/MasterPages/NestedMasterPageTest2.Master', verify content control's ContentPlaceHolderID attribute in the content page.Content2NestedMasterPageTest2錯誤。這裏真的發生了什麼?

+0

你什麼異常? – 2009-12-14 05:32:12

回答

1

您的嵌套母版頁有內容控制但沒有ContentPlaceHolder控件。嘗試添加它:

<asp:ContentPlaceHolder ID="cplh" runat="server"> 
</asp:ContentPlaceHolder> 

然後,Default.aspx中:

<asp:Content ID="cnt1" ContentPlaceHolderID="cplh" runat="server"> 
    This is a test which uses a nested master page! 
</asp:Content> 
+0

是的,我現在明白了。我會嘗試這個然後... – Jronny 2009-12-14 06:57:04

1

您需要的<asp:ContentPlaceholder>標籤添加到您的嵌套母版頁:

<asp:Content ID="basebody" ContentPlaceHolderID="body" runat="server"> 
    <asp:ContentPlaceHolder ID="Content2" runat="server"> 
    </asp:ContentPlaceHolder> 
</asp:Content>