2008-12-03 6 views
0

J'ai un site Mvc Asp.net où je veux donner une interface utilisateur et un accès séparé aux différents clients comme: http://company1.mysite.com
http://company2.mysite.com
http://company3.mysite.comUn site, plusieurs clients ui

Chaque client aura un interface utilisateur différente mais pratiquement la même fonctionnalité (ou avec certaines fonctionnalités désactivées).
Je voudrais séparer les graphiques pour chaque client comme logo, CSS et images.

Comment serait la meilleure façon de mettre en œuvre cela?

Répondre

1

Il y a un certain nombre de choses que vous pouvez faire. Le premier niveau, comme déjà mentionné, est d'utiliser un fichier CSS différent. Vous pouvez dynamiquement mettre un chemin différent à votre fichier CSS, en créant une méthode Helper. Donc, il serait utilisé quelque chose comme ceci:

<link href="<%=AppHelper.GetCSSPath("mysite.css")%>" rel="stylesheet" type="text/css" /> 

Cela vous donne un certain niveau de personnalisation. Un autre niveau serait en fait avoir différents fichiers de vue pour chaque sous-site. Vous pouvez le faire en créant un nouveau moteur ViewEngine:

public class SubSiteViewEngine: WebFormViewEngine 
{ 

    private string GetSiteRoot() { 
    // some logic to get the site root from the incoming URL 
    } 

    public SubSiteViewEngine() 
    { 

    MasterLocationFormats = new[] { 
      GetSiteRoote() + "/Views/{1}/{0}.master", 
      GetSiteRoote() + "/Views/Shared/{0}.master" , 
      GetSiteRoote() + "/Views/Shared/MasterViews/{0}.master" 
     }; 
    ViewLocationFormats = new[] { 
      GetSiteRoote() + "/Views/{1}/{0}.aspx", 
      GetSiteRoote() + "/Views/{1}/{0}.ascx", 
      GetSiteRoote() + "/Views/Shared/{0}.aspx", 
      GetSiteRoote() + "/Views/Shared/{0}.ascx", 
      GetSiteRoote() + "/Views/Shared/Controls/{0}.ascx" 
     }; 
    PartialViewLocationFormats = ViewLocationFormats; 
    } 

} 

Hope that helps.

P.S. Je vais le faire prochainement pour mon propre projet, donc je devrais avoir un vrai code de travail pour ça bientôt.

0

Vous devez vérifier l'URL entrante et servir différents fichiers CSS pour chacun d'entre eux. Vous pouvez utiliser des images d'arrière-plan si vous souhaitez changer d'image entre les entreprises.

Autres recommandations:

  • Conserver des dossiers séparés pour les différentes entreprises (et utiliser la racine des choses communes)
  • Si vous devez désactiver certaines fonctions, ne demandez pas le nom de l'entreprise, mais demander s'il est autorisé dans le "profil" actuel.

    If Company = A then 
        UseFunctionX = true 
    else 
        UseFunctionX = false 
    
    //later in the code 
    If UseFunctionX then 
        // do domenthing 
    

    De cette façon, l'ajout de profils est plus simple ce dernier

1

Une autre option consiste à organiser cela en utilisant IIS. Vous devrez vérifier l'impact sur les performances pour cela, mais en faisant cela, vous pouvez contrôler chaque application (ou un pool) séparément. Fondamentalement, ce que vous faites est de créer un site Web différent pour chaque locataire de votre système. Faites-le pointer vers votre dossier d'application pour le code de l'application réelle. Le contenu variable (css, une bibliothèque de fichiers peut-être utiliser votre imagination ;-)) devrait ensuite être ajouté en utilisant un répertoire virtuel pointant vers leur dossier. En utilisant cette approche, vous ne risquez pas d'avoir un croisement de données entre locataires en raison de bugs inattendus et autres.

Questions connexes