2011-04-18 25 views
16

Estoy tratando de usar vistas portátiles con ASP.NET MVC 3 y vistas de maquinillas de afeitar, ya que parece ser la mejor forma de crear una arquitectura de plug-in fácil. Así que tengo la configuración de mi biblioteca de clase y tengo mi vista ubicada en /Views/Admin/Index.cshtml y está configurada como un recurso incrustado. Luego incluyo ese proyecto como una dependencia para el proyecto principal de la aplicación web. Cuando intento acceder al controlador de administración, en la acción de índice aparece un mensaje que no puede encontrar ese archivo de vista (por lo que el controlador se incluye correctamente). Supongo que está intentando buscar en el proyecto principal de la aplicación web y no en las áreas portátiles binarias. ¿Hay alguna forma de que las vistas de la maquinilla de afeitar funcionen con áreas portátiles?ASP.NET MVC 3, Vistas de rastrillo y Áreas portátiles

Respuesta

0

¿Se aseguró de marcar su vista como recurso incrustado en su área portátil?

También encontré que la característica agradable de las áreas portátiles es que puede anular las Vistas incrustadas, por lo que si coloca una Vista en su Aplicación de host con Mismo nombre y Ubicación de Embedded con Different Code Logic tendrá prioridad sobre el incrustado Nice!

espero que esto ayude

+0

Supongo que depende del orden de los motores de vista registrados, si el motor de vista incrustado es primero, las vistas de área portátil anularán las vistas regulares en el proyecto raíz. Como nota al margen, diré que a veces puede obtener un pequeño aumento de rendimiento al borrar todos los motores de sus vistas y asegurarse de que solo haya registrado los que usa en su proyecto. Ver http://insightpassion.com/norbertraus/index.php/2011/04/29/razor-views-performance/ – JohannesH

12

He estado luchando en este tema en particular por un tiempo, pero creo que finalmente lo he descubierto.

¡La estructura de carpetas y cómo se llaman los espacios de nombres dentro de su proyecto es muy importante para que esto funcione correctamente!

Tengo un ejemplo de trabajo de un Área portátil con vistas afeitar incrustado aquí:

https://github.com/fretje/MembershipStarterKit

Tome un vistazo a la estructura del proyecto.

El área se llama UserAdministration, y hay una clase UserAdministrationRegistration en la raíz del proyecto, que se encuentra en el espacio de nombres UserAdministration. Luego hay una carpeta Controllers, Models y Views (al igual que un proyecto MVC normal) y en la carpeta Views, hay otra vez una carpeta UserAdministration que contiene las vistas para el área.

También otra cosa que es muy importante para que funcionen las vistas incrustadas: tiene que registrar un nuevo motor de vista en el método Application_Start de su archivo global.asax.cs, ¿lo hizo?

PortableAreaRegistration.RegisterEmbeddedViewEngine(); 

Y ... En la clase de registro, asegúrese de que reemplaza el método RegisterArea que tiene 2 parámetros (AreaRegistrationContext context y IApplicationBus bus), y llamar a la implementación base allí:

public override void RegisterArea(AreaRegistrationContext context, 
    IApplicationBus bus) 
{ 
    base.RegisterArea(context, bus); // <== very important! 

    context.MapRoute(
     "UserAdministration", 
     AreaName + "/{controller}/{action}/{id}", 
     new { controller = "UserAdministration", action = "Index", 
       id = UrlParameter.Optional } 
    ); 
} 

Si no llame a la implementación base, al menos debe agregar un

RegisterAreaEmbeddedResources(); 

Para asegurarse de que sus vistas y recursos incrustados están registrados.

+0

Gracias por esta respuesta, exactamente lo que estaba buscando. Todavía me da la vista no se encontró el error. Está configurado como incrustado pero aún nada. – Pieter

+0

Tuve que agregar una referencia de paquete nuget a EmbeddedResourceVirtualPathProvider en mi sitio web para que esto funcione. – Pieter

+0

Esto se ve idéntico a lo que tenía. Funciona bien en mi máquina de desarrollo, pero en realidad no busca los archivos de vista de escritura una vez desplegados. Registraba las vistas que buscaba, y saltaba completamente los archivos .cshtml, aunque sí encontró los de _layout y _viewstart. –

1

Tengo este trabajo, siguiendo las instrucciones de respuesta Fretje 's y luego también añadir una referencia a Nuget paquete EmbeddedResourceVirtualPathProvider en su sitio web.

+0

¿Es la referencia? ¿Qué hiciste para conectarlo? –

+1

En Visual Studio, haga clic derecho en las referencias en el Explorador de soluciones y seleccione "Agregar referencia de paquete de biblioteca". Seleccione "en línea" en la ventana emergente y busque "EmbeddedResourceVirtualPathProvider" luego haga clic en instalar. Tenga en cuenta que necesita que VS2010 se haya actualizado al Service Pack 1 para que el instalador del paquete Nuget forme parte de él. – Pieter

Cuestiones relacionadas