Dynamisch Themen in ASP.NET Einstellung
Frage
Ive erhielt eine Anwendung, die verschiedenen Domänen verbunden sind, anstelle des Kopierens und Modifizieren jeder Anwendung i auf der Festplatte gleichen physischen Standort verwenden, aber getrennten Anwendungspools und Websites auf IIS.
Grundsätzlich möchte ich ein Thema auf den Hostnamen basiert ändern. dh. Benutzer kommt zu „websome.com“ wird „websome“ Thema und Anwender kommt zu „jamessome.com“ bekommt „jamessome“ Thema.
Ich habe das Thema in web.config „Seiten“ Attribut, das das Thema global gesamte Website gilt. Gibt es eine Weise, die ich ändern kann diese Einstellung auf Fly basierend auf Domain Verwendung eingegeben aus? Es ist wohl möglich, aber was ist verkleinert und was schlagen Sie mit wenig Code zu tun, um Lösung zu vereinfachen. Wie ich verstehe kommt, wenn ich bearbeiten web.config jedes Mal Benutzer in es viel Zeit in Anspruch nehmen, die nicht so elegant ist ... Also alle ASP.NET-Gurus da draußen zwei Zeilen Code schreiben können, so Magie passieren?
Es gibt nur wenige Lösungen für diese Probleme auf der Website, aber das wird mich verlangen Code Page_Init Ereignis jeder Seite auf der Website hinzufügen, die unrealistisch ist.
Lösung
Eigentlich muss es in Page_PreInit
eingestellt wird, wird es nicht funktionieren, wenn Sie versuchen, das Thema in Page_Init
zu ändern.
Die häufigste Lösung ist eine übergeordnete Klasse für alle Seiten zu verwenden. Dies ist ein einmaliger nur dann ändern, und legt die Logik in der übergeordneten Klasse. Statt von der Vererbungs Page
Sie dann erben von, sagen wir, ThemedPage
. Innerhalb der Klasse ThemedPage
, die von Page
selbst natürlich erbt, können Sie die Page.OnPreInit Methode außer Kraft setzen.
Sie bat um „zwei Zeilen“, es ist eigentlich ein, wenn Sie die Unordnung entfernen. Dies ist VB:
Public Class ThemedPage
Inherits Page
Protected Overrides Sub OnPreInit(ByVal e As System.EventArgs)
Me.Theme = HttpContext.Current.Request.Url.Host.Replace(".com", "")
MyBase.OnPreInit(e)
End Sub
End Class
Und statt dies:
Partial Class _Default
Inherits System.Web.UI.Page
Sie jetzt schreiben dies:
Partial Class _Default
Inherits ThemedPage
Das ist alles! Eine einmalige Suchen / Ersetzen und du bist fertig. Die Vollständigkeit halber ist hier das gleiche (nur die Klasse) für C #:
// C# version
using System.Web;
using System.Web.UI;
public class ThemedPage : Page
{
protected override void OnPreInit(System.EventArgs e)
{
this.Theme = HttpContext.Current.Request.Url.Host.Replace(".com", "");
base.OnPreInit(e);
}
}
Update: hinzugefügt VB Codebeispiel
Update: hinzugefügt C # Codebeispiel
Hinweis: das Thema muss vorhanden sein, sonst erhalten Sie eine Ausnahme: Theme 'ThemeName' cannot be found in the application or global theme directories.
. Wenn Sie ein Standard-Thema oder kein Thema wollen, wenn das Thema nicht da ist, wickeln Sie es um einen try
/ catch
Block und verwenden Sie den catch
Block die Standard-Theme für die Einstellung.