2009-12-14 5 views
0

функцияКак настроить masterpage программно?

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

называется на OnPreInit ... Это работает, когда MasterPageFile является базой Masterpage ... Но как мы собираемся заставить его работать на вложенной MasterPage?

мы на самом деле пытались

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> 

на 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> 

и на 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. Но Content2 на NestedMasterPageTest2. Что действительно должно было произойти здесь?

+0

Что исключение вы получаете? –

ответ

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

1

Вы должны добавить <asp:ContentPlaceholder> тег в вложенной главной страницы:

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