Pergunta

Eu tenho um aplicativo que diferentes domínios está conectado, em vez de copiar e modificar cada aplicação eu uso mesma localização física no disco rígido, mas pools de aplicativos separados e sites sobre IIS.

Basicamente eu quero mudar um tema baseado em hostname. ie. user trata de "websome.com" pega "websome" tema eo usuário chega a "jamessome.com" recebe tema "jamessome".

Eu defini o tema em web.config atributo "páginas" que se aplica o tema global para o site inteiro. Existe alguma maneira eu posso modificar essa configuração na mosca com base no uso de domínio digitado? É provavelmente possível, mas quais são downsizes eo que você sugere para fazer com pouco código, a fim de solução de simplificar. Como eu entendo, se editar i web.config cada usuário tempo vem em que vai demorar muito tempo que não é tão elegante ... Assim, qualquer ASP.NET gurus lá fora, pode escrever duas linhas de código tão mágico vai acontecer?

Existem algumas soluções para estes problemas no site, mas isso vai exigir-me para adicionar código para Page_Init caso de cada página no site que é irrealista.

Foi útil?

Solução

Na verdade, ele deve ser definido em Page_PreInit, não vai funcionar se você tentar alterar o tema em Page_Init.

A solução mais comum é a utilização de uma classe pai para todas as suas páginas. Este é um one-time só mudam e coloca a lógica na classe pai. Em vez de herdar de Page você, então herdar de, digamos, ThemedPage. Dentro do ThemedPage classe, que herda de si, claro Page, você pode substituir o método Page.OnPreInit.

Você pediu "duas linhas", é realmente um se você remover a desordem. Esta é 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, em vez disso:

Partial Class _Default
    Inherits System.Web.UI.Page

Você agora escrever isto:

Partial Class _Default
    Inherits ThemedPage

Isso é tudo! A busca de uma só vez / substituir e está feito. Para sermos mais completos, aqui é o mesmo (somente a classe) 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);
    }
}

Atualização: VB adicionado amostra de código
Update: acrescentou C amostra # código

Nota: o tema deve existir, caso contrário, você receberá uma exceção: Theme 'ThemeName' cannot be found in the application or global theme directories.. Se você quer um tema padrão ou nenhum tema, se o tema não está lá, envolvê-la em torno de um bloco de try / catch e usar o bloco catch para definir o tema padrão.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top