2009-04-06 8 views
0

Ich habe eine Masterpage, die über ein HTTPModule auf PreInit() gesetzt wird. FRÖHLICHE ZEIT! Problem ist, dass ich den masterpagefile Wert auf einigen Seiten aufgrund eines Layoutproblems überschreiben muss. Wer kennt den besten Weg?Masterpage-Modul überschreiben

Ich habe versucht, ein Page_Preinit auf meiner Seite hinzuzufügen, aber es wird vor dem PreInit() in meinem Modul ausgeführt, so dass es dort zurückgesetzt wird. Ich denke, dass ich vielleicht eine Kontextvariable auf meiner Seite aktualisieren sollte (etwas wie masterSetAtPage, von dem ich in meinem Modul abzweigen könnte). Irgendwelche Gedanken darüber?

Ich arbeite in VB.Net, aber ein C# Beispiel wäre auch in Ordnung.

+0

Können Sie den PreInit-Code aktualisieren, um die benötigte Masterseite anzugeben, oder muss die Masterseite basierend auf dem geladenen Inhalt aktualisiert werden? –

+0

Können Sie beschreibender sein, was Sie tun möchten? Das große Hindernis ist normalerweise, PreInit zu bekommen, um die Masterpage erfolgreich zu setzen, warum nicht einfach nicht einstellen oder auf eine andere setzen? – JoshJordan

Antwort

1

Vermutlich Ihre aktuellen Code sieht ein wenig wie der Code hier beschrieben ...

http://www.odetocode.com/articles/450.aspx

Wenn ja, dann können Sie Ihren Code ändern, der die PreInit etwas wie folgt aussehen Haken nach oben ...

if (page != null && String.IsNullOrEmpty(page.MasterPageFile)) 
{ 
    page.MasterPageFile = "~/Master1.master"; 
} 

und dann jede Seite, die eine eigene Seite Richtlinie auf die „default“ Masterseite angeschlossen ein Masterpagefile verwendet wird vermieden wird.

Wenn Sie diese programmatisch tun, dann diesen Code ...

protected override void OnPreInit(EventArgs e) 
{ 
    base.OnPreInit(e); 
    this.MasterPageFile = "cheese.master"; 
} 

... im Code Ihrer Seite hinter würde den Trick. Offensichtlich wurde dieser Code nur auf Seiten hinzugefügt, auf denen das spezielle Verhalten benötigt wurde.

+0

Das sieht gut aus, aber ich muss den Master programmatisch festlegen, daher kann ich in der Seitendirektive keinen statischen Wert festlegen. – madcolor

+0

OK, so dass dies geschieht ... geschützt überschreiben void OnPreInit (EventArgs e) { base.OnPreInit (e); this.MasterPageFile = "cheese.master"; } ... in Ihrer Seite sollte funktionieren. Ich bin mir bewusst, dass dies genau das ist, was Mark (oben) vorgeschlagen hat - obwohl er OnInit und nicht OnPreInit zeigte. –

+0

@Martin - yep, ich pochierte diesen. ;) PreInit ist der richtige Ort. –