2009-12-14 5 views
0

la fonctioncomment configurer la page de maître par programme?

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

est appelée sur la onPreInit ... Cela fonctionne lorsque le MasterPageFile est le masterpage de base ... Mais comment allons-nous le faire fonctionner pour le masterpage imbriqué?

nous avons essayé

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

mais il jette une exception ... = (


Alors, pour rendre les choses plus claires, sur le 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> 

sur la base.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> 

et sur les default.aspx.cs

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

il travaille ...


mais quand j'utilise un 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> 

a ensuite changé la default.aspx.cs

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

et j'ai changé le default.aspx

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

retourne une erreur qui dit Cannot find ContentPlaceHolder 'Content2' in the master page '/MasterPages/NestedMasterPageTest2.Master', verify content control's ContentPlaceHolderID attribute in the content page. Mais Content2 est sur NestedMasterPageTest2. Qu'est-ce qui a vraiment dû se passer ici?

+0

Quelle exception obtenez-vous? –

Répondre

1

Votre page maître imbriquée dispose d'un contrôle de contenu mais pas de contrôle ContentPlaceHolder. Essayez ajouter:

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

Puis, en Default.aspx:

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

ouais, je l'ai maintenant. Je vais essayer ça alors ... – Jronny

1

Vous devez ajouter une balise <asp:ContentPlaceholder> à votre page maître imbriquée:

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