2009-07-24 22 views
5

Estoy creando una solución ASP.NET MVC, y en mi interior tenía 2 proyectos de sitio web MVC.¿Cómo puedo hacer referencia a una vista maestra en un proyecto diferente en ASP.NET MVC?

Estoy interesado en crear un tercer proyecto llamado "Compartido", donde puedo hacer referencia a las vistas/contenido compartidos entre los dos sitios, por lo que tengo un solo lugar para editarlos.

  • WebUI.Site1 (MVC Sitio ASP.NET)
  • WebUI.Site2 (ASP.NET MVC Site)
  • WebUI.Shared (recién creado ASP.NET MVC Site)

¿Cómo puedo hacer referencia a la ubicación de Masterview si está en un proyecto diferente?

Así, normalmente en la parte superior de un punto de vista que haría referencia a un Masterview así:

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

Sin embargo,

Ahora, que "Tabbed.Master" no está en el proyecto local, está en un proyecto diferente en la solución. He creado una referencia al proyecto, pero no sé cómo hacer referencia a Tabbed.Master desde WebUI.Site1 a WebUI.Shared?

Algo así como:

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

no funciona.

¿Cómo puedo hacer referencia a la ubicación de cosas como masterviews, archivos css, imágenes en proyectos como ese?

Respuesta

0

asumir que el masterpage vive en WebUI.Shared Root/Views/SharedPage.Master

Trate de crear un directorio virtual en tanto WebUI.Site1 y WebUI.Site2 apuntando a WebUI.Shared:

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

Desde dentro WebUI.Site1 y WebUI.Site2 utilice la siguiente ruta para acceder al masterpage: ~/Shared/Views/SharedPage.Master

No creo que el IDE pueda hacer un seguimiento de la referencia, pero sí uld trabajo en el servidor.

EDIT: WebUI.Site1 y WebUI.Site2 pueden necesitar una referencia en WebUI.Shared.

+0

Esto no funcionará. No puede simplemente apuntar a un aspx/ascx o SiteMaster en otra ruta virtual y hacer que se convierta en parte de su base de código. –

+0

@Nissan Fan - Sí, puedes. Acabo de configurar un proyecto de prueba para verificar mi afirmación. A IIS no le importa si una página maestra determinada está en el mismo proyecto web que la raíz web. Siempre que las referencias y las rutas se puedan encontrar desde la raíz del sitio web, IIS está contento. Esto supone que está utilizando IIS para configurar los sitios: esta técnica no funcionará bien con el servidor de desarrollo ASP.NET integrado de Visual Studio. – Brandon

0

Debe crear un ViewEngine personalizado si desea utilizar un lugar diferente al de la carpeta Ver del proyecto para almacenar sus vistas.

Echa un vistazo a este prototype por Phil Haack. Se trata de almacenar las vistas en la base de datos, pero debería darle una idea sobre dónde comenzar.

1

Debido a la naturaleza de MasterViews, debe encontrar una solución basada en archivos. La ruta virtual es una forma de hacerlo, pero creo que en algún momento se meterá en problemas: ¿cómo maneja las referencias de archivos cuando usa el servidor web interno de Visual Studio?

Y piense en el dolor que sufre cuando falta este camino virtual en IIS.

Visual Studio le permite vincular a archivos de otros proyectos. Esos archivos se copiarán en tiempo de compilación:

Haga clic derecho en el Explorador de soluciones -> Agregar elemento existente ... -> seleccionar archivos -> Añadir Como Enlace

En lo personal, no me' cuidar esta característica. Pero parece hacer lo que necesitas.

Cuestiones relacionadas