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.

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top