Pregunta

Tengo una aplicación a la que se conectan diferentes dominios, en lugar de copiar y modificar cada aplicación, uso la misma ubicación física en el disco duro, pero grupos de aplicaciones y sitios web separados en IIS.

Básicamente quiero cambiar un tema basado en el nombre de host. es decir. el usuario llega a " websome.com " obtiene " websome " El tema y el usuario vienen a " jamessome.com " obtiene " jamessome " tema.

Configuré el tema en web.config " páginas " Atributo que aplica el tema globalmente a todo el sitio web. ¿Hay alguna forma en que pueda modificar esa configuración en vuelo en función del uso del dominio ingresado? Probablemente sea posible, pero cuáles son las reducciones y qué sugiere hacer con poco código para simplificar la solución. Como entiendo, si edito web.config cada vez que el usuario ingresa, tomará mucho tiempo, lo que no es tan elegante ... ¿Entonces cualquier gurú de ASP.NET puede escribir dos líneas de código para que suceda la magia?

Hay pocas soluciones para estos problemas en el sitio web, pero esto requerirá que agregue un código al evento Page_Init de cada página del sitio, lo que no es realista.

¿Fue útil?

Solución

En realidad, debe configurarse en Page_PreInit , no funcionará si intentas cambiar el tema en Page_Init .

La solución más común es usar una clase principal para todas sus páginas. Este es un cambio de una sola vez y coloca la lógica en la clase principal. En lugar de heredar de Page , heredará de, por ejemplo, ThemedPage . Dentro de la clase ThemedPage , que se hereda de la Page , por supuesto, puede anular el método Page.OnPreInit.

Pediste " dos líneas " ;, en realidad es una si eliminas el desorden. Esto es 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

Y en lugar de esto:

Partial Class _Default
    Inherits System.Web.UI.Page

ahora escribes esto:

Partial Class _Default
    Inherits ThemedPage

Eso es todo! Una búsqueda / reemplazo de una sola vez y listo. Para completar, aquí es lo mismo (solo la clase) para 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);
    }
}

Actualización: ejemplo de código de VB agregado
Actualización: ejemplo de código de C # agregado

Nota: el tema debe existir, de lo contrario, obtendrás una excepción: El tema "ThemeName" no se puede encontrar en la aplicación o en los directorios de temas globales. . Si desea un tema predeterminado o ningún tema si el tema no está allí, envuélvalo alrededor de un bloque try / catch y use el código catch bloque para configurar el tema predeterminado.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top