2009-08-04 13 views
0

Résultat souhaité:.net mvc section d'administration unique plusieurs sites

4 clients face à des sites comme des projets séparés 1 ensemble de code d'administration utilisé par les quatre sites

Ma configuration actuelle est 4 projets:

  • de base pour les modèles/entités

  • données pour les dépôts

  • Contrôleurs pour, bien, les contrôleurs

  • Web pour les vues

Maintenant, le projet Web contient des vues de côtés d'administration et face à la clientèle. Je veux partager cela en un projet d'administration et 4 projets 'clients'.

J'ai google avec peu de succès sur le référencement d'une application web à partir d'une application web. J'ai lu sur areas sur haacked.com, mais cela ne semble pas tout à fait raison. Je ne veux pas particulièrement incorporer des vues dans une DLL, car cela serait pénible lors du débogage/codage du balisage. Évidemment, je ne veux pas de multiples copies du code.

Quelqu'un peut-il indiquer ou suggérer des façons possibles de le faire? Je suis un peu perplexe.

Répondre

1

Si la raison de scinder le projet en 4 webprojects est que les clients ont des vues différentes, essayez ceci:

Have 1 et ProjetWeb utiliser un sous-dossier pour les vues qui diffèrent.

  • Vues/Accueil/About.aspx (utilisé si aucun sous-dossier correspondant n'a été trouvé)
  • vues/Accueil/Customer1/About.aspx
  • Vues/Accueil/Customer2/About.aspx

Vous pouvez avoir un viewengine personnalisé qui décide quelle vue il doit afficher. Chaque installation du site Web a un client défini dans le fichier web.config.

public class MultiTennantWebFormViewEngine : WebFormViewEngine 
{ 
    private static string[] LocalViewFormats = 

    new string[] { 
     "~/Views/{1}/" + ApplicationConfiguration.CustomerName + "/{0}.aspx", 
    "~/Views/{1}/{0}.aspx", 
    "~/Views/{1}/" + ApplicationConfiguration.CustomerName + "/{0}.ascx", 
    "~/Views/{1}/{0}.ascx", 
    "~/Views/Shared/{0}.aspx", 
    "~/Views/Shared/{0}.ascx" 
}; 

    public LocalizationWebFormViewEngine() 
    {  
    base.ViewLocationFormats = LocalViewFormats; 
    base.PartialViewLocationFormats = LocalViewFormats; 
    base.MasterLocationFormats = new string[] { 

      "~/Views/{1}/" + ApplicationConfiguration.CustomerName + "/{0}.master", 
      "~/Views/{1}/{0}.master", 
      "~/Views/Shared/" + ApplicationConfiguration.CustomerName + "/{0}.master", 
      "~/Views/Shared/{0}.master" 
     }; 
} 

}

+0

C'est génial, merci! Je vais certainement y aller :-) –