2011-01-08 6 views
0

Current Setup

Ich habe derzeit drei Masterpages und Content-Seiten in der folgenden Hierarchie:Kann eine Masterpage auf eine andere Masterpage mit denselben Inhalts- und ContentPlaceholder-Tags verweisen?

  • Eine Stammebene Masterpage, die das Endergebnis zeigt. Nennen Sie dieses "A"
  • Zwei Geschwisterseiten, die nicht aufeinander verweisen, sondern alle die gleichen contentplaceholder Elemente enthalten, nur in einer anderen Reihenfolge mit anderen <div> 's sie umgeben. Beide verweisen auf die Masterpage auf Root-Ebene. Nennen Sie diese "B1" und "B2".
  • Mehrere Inhaltsseiten, die auf die eine oder die anderen Geschwisterseiten verweisen (nicht beide). Nenne diese "C1" durch "C-was auch immer". Grundsätzlich

ich habe:

Cn => B1 => A

Cm => B2 => A

Diese Hierarchie funktioniert gut.

gewünschte Setup

Was ich tun möchte, ist auf diese Hierarchie in eine neue Ebene hinzufügen (eine neue Master-Seite) zwischen den Inhaltsseiten und die Geschwister Masterpages. Grundsätzlich ist es also so:

  • Eine Masterpage auf Root-Ebene, die das Endergebnis anzeigt.
  • Zwei Geschwister Seiten plus ein drittes Geschwister. Nennen Sie es B3
  • Eine neue mittlere masterpage, die dynamisch eine der Geschwistermasterseiten "wählt". Das gewünschte Verhalten besteht darin, den von C angegebenen Inhalt direkt an Bn zu übergeben, ohne ihn zu modifizieren. Das einzige, was D aktiv tut, ist zu wählen, welches Bn. Rufen Sie diese neue Masterpage D.
  • Mehrere Inhaltsseiten, die auf die neue mittlere Masterseite statt der alten Geschwister verweisen.

Die Herausforderung für diese ist, ich innerhalb der Grenzen eines ziemlich komplexen Produkts gerade arbeitete und Ich kann die ursprünglichen zwei Geschwister nicht ändern Masterpages (B1 und B2) oder Inhaltsseiten (C) in jedem sinnvoll.

Ich möchte:

Cn => D => B1 => A

Cm => D => B2 => A

Ck => D => B3 => A

Im Wesentlichen sollte D "passieren durch "alles, was es zu jeder B-Level-Masterpage, die es wählt. Ich kann diese Logik nicht in die C-Level-Seiten einfügen.

Weitere Details

  • Alle B-Level-Seiten haben den gleichen Inhalt/Content Tags, nur anders geordnet und gestylt.
  • D können als gewunden sein, wie es zu sein hat, solange es nicht zu ändern C oder B.
  • Ich bin mit ASP.Net 2,0

Ist dies möglich, erfordert?

Antwort

0

Eine MasterPage hat kein Page_PreInit-Ereignis, daher müssen alle Änderungen an der MasterPage-Hierarchie (verschachtelt oder nicht) von der Inhaltsseite stammen.

Also, wenn Sie die Inhaltsseiten ändern, hinzufügen:

void Page_PreInit(object sender, EventArgs e) 
{ 
    //if (someCondition) 
     this.Master.MasterPageFile = "~/Path/B1.master"; 
    //else if (otherCondition) 
     this.Master.MasterPageFile = "~/Path/B2.master"; 
    //etc. 
} 
+0

nicht sicher, ob ich so viel Kontrolle ... Ich werde es ein Schuss. – Peach

+0

Wenn Sie nicht so viel Kontrolle über die Seiten selbst haben, können Sie auch eine partielle Klasse mit demselben Namen/Namespace wie die Klasse, die die Inhaltsseiten erben, erstellen und den obigen Code der partiellen Klasse hinzufügen. (Dies setzt voraus, dass die Klasse, die die Inhaltsseite erbt, nicht bereits Page_Init definiert und nicht versiegelt ist.) – lukiffer

+0

Ich hatte nicht genug Kontrolle, um genau das zu tun, was Sie erwähnt haben, aber ich fand einen anderen Mechanismus innerhalb der Grenzen von das Produkt, mit dem ich auf eine andere Weise machen konnte, was ich wollte. Unabhängig davon war Ihr Vorschlag hilfreich für das allgemeine Verständnis. Vielen Dank! – Peach