2010-12-10 6 views
3

Ich entwickle eine Umgebung, in der mehrere Anwendungen auf demselben Server ausgeführt werden, die jedoch alle eine Masterseite verwenden.Gibt es eine Möglichkeit, eine Masterseite von außerhalb der aktuellen Anwendung zu laden?

Kann eine Masterseite aus einer anderen Anwendung geladen werden? In einer meiner Anwendungen habe ich diesen Code:

protected override void OnPreInit(EventArgs e) 
    { 
     base.OnPreInit(e); 
     this.MasterPageFile = "~/../MasterPages/Root.master"; 
    } 

Was dies tut, ist die Master-Seite auf eine Datei außerhalb meiner aktuellen Anwendung gesetzt. (Beachten Sie die „..“ nach der Tilde - also bin ich an der Wurzel meiner aktuellen App gehen, dann ein Verzeichnis verstärkt auf eine Masterseite zu finden.)

ASP ist unzufrieden mit diesem:

The virtual path '/MasterPages/Root.master' maps to another application, which is not allowed. 

Ich verstehe, dass es gestresst über die Tatsache sein kann, dass es keine Backing-Klasse dafür gibt, aber was ist, wenn ich nichts im Code-Behind habe, und ich meine Master-Seite von nichts zu übernehmen - so die die ganze Sache ist in der ".master" -Datei enthalten?

Gibt es eine Möglichkeit, dies zu tun?

Antwort

1

Denken Sie einfach an der Manschette, aber was ist, wenn Sie ein virtuelles Verzeichnis unter jeder Anwendung zu erstellen, die auf demselben physischen Verzeichnis Karten:

protected override void OnPreInit(EventArgs e) 
{ 
     base.OnPreInit(e); 
     this.MasterPageFile = "~/MasterPages/Root.master"; 
} 

Sie könnten also eine physische Layout haben:

c: \ inetpub \ wwwroot \ Masterpages
c: \ inetpub \ wwwroot \ App1
c: \ inetpub \ wwwroot \ App2

würden Sie haben dann IIS einrichten wie:

root \ App1
root \ App1 \ Masterpages
root \ App2
root \ App2 \ Masterpages

+0

Zwei Antworten waren richtig. Markieren Sie dieses nur für die Tiefe der Antwort. – Deane

3

Sie könnten ein virtuelles Verzeichnis in Ihre App-Ordnerstruktur übernehmen, dann kann dieses Verzeichnis mehreren Anwendungen gleichzeitig zugeordnet werden.

0

Wir haben unsere gemacht Masterseite sehr allgemein. Jede Masterseite würde eine WebRequest verwenden, um unsere gemeinsame horseshoe html (oder .aspx) Seite zu erfassen.

Das Schwierigste an diesem Ansatz ist, dass wir Marker in das Hufeisen setzen mussten. Diese Markierungen würden anzeigen, was die Anwendung ersetzen könnte und wo sie ihren Inhalt platzieren könnte.

+0

Ich habe genau das versucht, was Sie vorschlagen. Es war ein großer Schmerz für uns. – Deane

+0

Zuerst war es ein großer Schmerz für uns, aber nachdem wir den Prozess eingeführt hatten, konnte keine Anwendung mehr hinzugefügt werden. Da unser Hufeisen ein mandatiertes Aussehen hat, ist es wahrscheinlich der beste Weg (und als App-Entwickler müssen Sie sich keine Gedanken darüber machen, das Hufeisen zu erstellen und ob es das Mandat erfüllt). – Lareau