Domanda

Ho un'applicazione a cui sono collegati domini diversi, invece di copiare e modificare ogni applicazione utilizzo la stessa posizione fisica sul disco rigido ma pool di applicazioni e siti Web separati su IIS.

Fondamentalmente voglio cambiare un tema in base al nome host. vale a dire. l'utente viene su " websome.com " ottiene "websome" il tema e l'utente arrivano a " jamessome.com " ottiene "jamessome" tema.

Ho impostato il tema in web.config " pagine " attributo che applica il tema a livello globale all'intero sito Web. È possibile modificare tale impostazione al volo in base all'utilizzo del dominio inserito da? Probabilmente è possibile, ma quali sono i ridimensionamenti e cosa suggerisci di fare con un piccolo codice per semplificare la soluzione. Come capisco se modifico web.config ogni volta che arriva l'utente, ci vorrà un sacco di tempo, il che non è così elegante ... Quindi qualsiasi guru di ASP.NET là fuori può scrivere due righe di codice in modo che accada la magia?

Esistono poche soluzioni per questo problema sul sito Web, ma ciò richiederà di aggiungere codice all'evento Page_Init di ogni pagina del sito che non è realistico.

È stato utile?

Soluzione

In realtà, deve essere impostato in Page_PreInit , non funzionerà se si tenta di cambiare il tema in Page_Init .

La soluzione più comune è usare una classe genitore per tutte le tue pagine. Questa è una modifica unica e inserisce la logica nella classe genitore. Invece di ereditare da Page erediti da, diciamo, ThemedPage . All'interno della classe ThemedPage , che eredita naturalmente dalla Pagina , puoi sovrascrivere il metodo Page.OnPreInit.

Hai chiesto " due righe " ;, in realtà è una se rimuovi il disordine. Questo è 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

E invece di questo:

Partial Class _Default
    Inherits System.Web.UI.Page

ora scrivi questo:

Partial Class _Default
    Inherits ThemedPage

Questo è tutto! Una ricerca / sostituzione una tantum e il gioco è fatto. Per completezza, ecco lo stesso (solo la classe) per 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);
    }
}

Aggiornamento : esempio di codice VB aggiunto
Aggiornamento: esempio di codice C # aggiunto

Nota : il tema deve esistere, altrimenti si ottiene un'eccezione: Tema "Nome tema" non può essere trovato nelle directory dell'applicazione o del tema globale. . Se vuoi un tema predefinito o nessun tema se il tema non è presente, avvolgilo attorno a un blocco try / catch e usa il catch blocco per l'impostazione del tema predefinito.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top