Question

J'ai une application à laquelle différents domaines sont connectés, au lieu de copier et de modifier chaque application, j'utilise le même emplacement physique sur le disque dur, mais des pools d'applications et des sites Web distincts sur IIS.

En gros, je veux changer un thème en fonction du nom d’hôte. c'est à dire. l'utilisateur accède à " websome.com " obtient " websome " Le thème et l'utilisateur arrivent sur "jamessome.com". obtient " jamessome " thème.

J'ai défini le thème dans web.config " pages " attribut qui applique le thème globalement à l'ensemble du site. Existe-t-il un moyen de modifier ce paramètre à la volée en fonction de l'utilisation du domaine entré? C'est probablement possible, mais quelles sont les réductions de taille et que suggérez-vous de faire avec peu de code afin de simplifier la solution? Si je comprends bien, si je modifie web.config chaque fois que l'utilisateur entre, cela prendra beaucoup de temps, ce qui n'est pas si élégant ... Donc, tous les gourous d'ASP.NET peuvent écrire deux lignes de code pour que la magie se produise?

Il existe peu de solutions à ces problèmes sur le site Web, mais cela nécessitera d'ajouter du code à l'événement Page_Init de chaque page du site, ce qui est irréaliste.

Était-ce utile?

La solution

En fait, il doit être défini dans Page_PreInit , cela ne fonctionnera pas si vous essayez de changer le thème dans Page_Init .

La solution la plus courante consiste à utiliser une classe parente pour toutes vos pages. Ceci est un changement unique et place la logique dans la classe parente. Au lieu d'hériter de Page , vous héritez de, disons ThemedPage . Dans la classe ThemedPage , qui hérite de Page elle-même, vous pouvez bien sûr remplacer la méthode Page.OnPreInit.

Vous avez demandé "deux lignes", c’est en fait une si vous supprimez le fouillis. C'est 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

Et au lieu de cela:

Partial Class _Default
    Inherits System.Web.UI.Page

vous écrivez maintenant ceci:

Partial Class _Default
    Inherits ThemedPage

C'est tout! Une recherche / remplacement ponctuelle et vous avez terminé. Par souci d’exhaustivité, voici la même chose (seulement la classe) pour 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);
    }
}

Mise à jour: exemple de code VB ajouté
Mise à jour : exemple de code C # ajouté

Remarque: le thème doit exister, sinon vous obtenez une exception: Le thème 'Nom du thème' est introuvable. dans les répertoires d'applications ou de thèmes globaux. . Si vous voulez un thème par défaut ou aucun thème si le thème n'y est pas, enroulez-le autour d'un bloc try / catch et utilisez le catch . bloquer pour définir le thème par défaut.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top