Laden...

MasterPage-Inhalte in einzelen Dateien aufteilen

Erstellt von Erulu vor 17 Jahren Letzter Beitrag vor 17 Jahren 1.563 Views
E
Erulu Themenstarter:in
19 Beiträge seit 2006
vor 17 Jahren
MasterPage-Inhalte in einzelen Dateien aufteilen

Mein Problem ist, dass wenn ich den Content einer MasterPage in unterschiedlichen Dateien aufteile, diese einzelen Seiten nicht korrekt zusammengefügt werden. Z.B. wenn ich Content.aspx aufrufe erhalte ich nur: "This is my content!" und die Header und Footer fehlen. Wenn ich aber die verschiedenen Contentplaceholder in einer Datei habe (siehe den auskommentierten Teil in HeaderFooter) werden die einzelnen Teile korrekt zusammengesetzt. Man kann das aber schon in einzelne Dateien aufteilen, oder?

Ich habe folgende MasterPage definiert:


<%@ Master Language="C#" AutoEventWireup="true" CodeFile="MasterPage.master.cs" Inherits="MasterPage" %>
<!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>Untitled Page</title>
</head>
<body>
    <form id="form1" runat="server">
        <table>
            <tr>
                <td colspan="2" style="height: 200px">
                    <asp:ContentPlaceHolder ID="Header" runat="server" />
                </td>
            </tr>
            <tr>
                <td>
                    <asp:ContentPlaceHolder ID="Content" runat="server" />
                </td>
            </tr>
            <tr>
                <td colspan="2">
                    <asp:ContentPlaceHolder ID="Footer" runat="server" />
                </td>
            </tr>
        </table>
    </form>
</body>
</html>

Meine Conten.aspx sieht folgendermaßen aus:


<%@ Page Language="C#" MasterPageFile="~/MasterPage/MasterPage.master" AutoEventWireup="true" CodeFile="HeaderFooter.aspx.cs" Inherits="Header" Title="Header and Footer" %>

<asp:Content ID="Content" ContentPlaceHolderID="Content" Runat="Server">
<h1>This is my content!</h1>
</asp:Content>

Und die HeaderFooter-Datei:


<%@ Page Language="C#" MasterPageFile="~/MasterPage/MasterPage.master" AutoEventWireup="true" CodeFile="HeaderFooter.aspx.cs" Inherits="Header" Title="Header and Footer" %>

<asp:Content ID="Header" ContentPlaceHolderID="Header" Runat="Server">
    This is a very nice header.
</asp:Content>
   
<%--<asp:Content ID="Content" ContentPlaceHolderID="Content" Runat="Server">
<h1>This is my content!</h1>
</asp:Content> --%>
    
<asp:Content ID="Footer" ContentPlaceHolderID="Footer" Runat="Server" >
    ..........Footer.........
</asp:Content>

3.170 Beiträge seit 2006
vor 17 Jahren

Hallo,
ich glaube nicht daß Du das mit einer MasterPage so machen kannst. Es wird ja von Client schließlich nur die Content.aspx angefragt, die sucht sich Ihre Masterpage und trägt die PlaceHolder ein, die sie hat. Dann wird die Seite ausgeliefert. Die MasterPage selbst hat ja dann keine Ahnung davon, woher Sie den Header und Footer besetzen soll.
Wenn Du das alles aufteilen willst, um z.B. Header und Footer auch in anderen Dateien zu verwenden, bieten sich UserControls (.ascx) an.

Non quia difficilia sunt, non audemus, sed quia non audemus, difficilia sunt! - Seneca

E
Erulu Themenstarter:in
19 Beiträge seit 2006
vor 17 Jahren

Ich dachte, das sei ein Nutzen von MasterPages, dass man die verschiedenen Inhalte in unterschiedliche Dateien packen kann? Wofür sollen denn dann MasterPages gut sein?

1.373 Beiträge seit 2004
vor 17 Jahren

Hallo,

Ich würde folgendes Vorschlagen:
Du machst aus dem Header und dem Footer Usercontrols. Die Content-Seite müsste dann zwar noch immer die einzelnen Content-Regionen angeben, bräuchte dort aber nur kurz die Footer/Header Controls "zu erwähnen", die dort hin gehören. Damit hast du dann die Aufteilung in mehrere Dateien, wie du sie wolltest.

Grüße,
Andre

3.170 Beiträge seit 2006
vor 17 Jahren

Hallo,
MasterPages sind dafür gut, dynamische Inhalte immer wieder in das selbe Layout zu packen, ohne daß man das Layout in einer Seite immer neu schreiben muss. Alle statischen Inhalte können in die MasterPage gepackt werden, die dynamischen Inhalte werden über die ContentPlaceHolder gesteuert.
Wenn z.B. Dein Header und Footer statisch wären, könntest Du diese auch direkt in der Masterpage einbauen (ohne Placeholder). Dann würden Sie immer angezeigt, wenn eine Seite aufgerufen wird die die Masterpage benutzt.
Wenn sich Header und Footer aber ebenfalls ändern sollen, kannst Du dafür jeweils ein ascx-Control basteln und dieses in der Masterpage einbinden. Dann ist jedenfalls für das richtige Layout gesorgt.

Non quia difficilia sunt, non audemus, sed quia non audemus, difficilia sunt! - Seneca