2009-07-24 5 views
5

Je crée une solution ASP.NET MVC, et à l'intérieur j'avais 2 projets de site Web MVC.Comment puis-je référencer une vue principale dans un autre projet dans ASP.NET MVC?

Je suis intéressé par la création d'un 3ème projet appelé "Partagé", dans lequel je peux référencer les vues/contenus partagés entre les deux sites pour n'avoir qu'un seul endroit pour les éditer.

  • WebUI.Site1 (ASP.NET MVC site)
  • WebUI.Site2 (ASP.NET MVC site)
  • WebUI.Shared (nouvellement créé ASP.NET MVC site)

Comment puis-je référencer l'emplacement d'un Masterview s'il se trouve dans un projet différent?

Donc, normalement au sommet d'une vue que je renverrait une Masterview comme ceci:

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Tabbed.Master" Inherits="System.Web.Mvc.ViewPage<WebUI.ViewModels.Admin.EditProfileViewModel>" %> 

Cependant,

Maintenant que "Tabbed.Master" est pas dans le projet local, c'est dans un projet de différence dans la solution. J'ai créé une référence au projet mais je ne sais pas comment référencer Tabbed.Master de WebUI.Site1 à WebUI.Shared?

Quelque chose comme:

<%@ Page Title="" Language="C#" MasterPageFile="WebUI.Shared.Views.Tabbed.Master" Inherits="System.Web.Mvc.ViewPage<WebUI.ViewModels.Admin.EditProfileViewModel>" %> 

ne fonctionne pas.

Comment puis-je référencer l'emplacement de choses comme des masterviews, des fichiers css, des images dans des projets comme celui-là?

Répondre

0

On suppose que le masterpage vit à WebUI.Shared Root/Views/SharedPage.Master

Essayez de créer un répertoire virtuel sous les deux WebUI.Site1 et WebUI.Site2 pointant vers WebUI.Shared:

WebUI.Site1/Shared => WebUI.Shared Root 
WebUI.Site2/Shared => WebUI.Shared Root 

De l'intérieur WebUI.Site1 et WebUI.Site2 utiliser le chemin suivant pour accéder au masterpage: ~/Shared/Views/SharedPage.Master

Je ne pense pas que l'IDE sera en mesure de garder une trace de la référence, mais il sho Travailler sur le serveur.

EDIT: WebUI.Site1 et WebUI.Site2 peuvent avoir besoin d'une référence sur WebUI.Shared.

+0

Cela ne fonctionnera pas. Vous ne pouvez pas simplement pointer vers un aspx/ascx ou SiteMaster dans un autre chemin virtuel et l'avoir fait partie de votre base de code. –

+0

@Nissan Fan - Oui, vous pouvez. Je viens de mettre en place un projet de test pour vérifier mon affirmation. IIS ne se soucie pas si une page maître donnée est dans le même projet Web que la racine Web. Tant que les références et les chemins sont trouvables à partir de la racine du site, IIS est heureux. Cela suppose que vous utilisez IIS pour configurer les sites - cette technique ne fonctionnera pas bien avec le serveur de développement ASP.NET intégré de Visual Studio. – Brandon

0

Vous devez créer un ViewEngine personnalisé si vous souhaitez utiliser un emplacement différent du dossier Vue du projet pour stocker vos vues.

Jetez un oeil à ce prototype par Phil Haack. Il s'agit de stocker les vues dans la base de données, mais cela devrait vous donner une idée de l'endroit où commencer.

1

En raison de la nature de MasterViews, vous devez trouver une solution basée sur un fichier. Le chemin virtuel est une façon de le faire, mais je pense que vous aurez des problèmes à un moment donné: Comment gérez-vous les références de fichiers lorsque vous utilisez le serveur Web interne de Visual Studio?

Et pensez à la douleur que vous souffrez lorsque ce chemin virtuel est manquant dans IIS. Visual Studio vous permet de lier des fichiers d'autres projets.

Ces fichiers seront copiés au moment de la compilation:

Faites un clic droit dans l'Explorateur de solutions -> Ajouter un élément existant ... -> sélectionner des fichiers -> Ajouter comme lien

Personnellement, je ne » t attention pour cette fonctionnalité. Mais il semble faire ce dont vous avez besoin.

Questions connexes