asp.net-mvc-3 razor mvccontrib portable-areas

ASP.NET MVC 3, vistas de la maquinilla de afeitar y áreas portátiles



asp.net-mvc-3 razor (3)

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

También encontré que la buena característica de las áreas portátiles es que puede anular las vistas incrustadas, por lo que si coloca una vista en su aplicación host con el mismo nombre y ubicación de la incrustada con una lógica de código diferente, tendrá prioridad sobre la incrustada. !!!

Espero que esto ayude

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


Conseguí este trabajo siguiendo las instrucciones en la respuesta de Fretje y luego también agregué una referencia del paquete nuget a EmbeddedResourceVirtualPathProvider en su sitio web.


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

¡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 práctico de un área portátil con vistas de maquinilla de afeitar incrustada aquí:

https://github.com/fretje/MembershipStarterKit

Echa un vistazo a la estructura del proyecto.

El nombre del área es UserAdministration , y hay una clase UserAdministrationRegistration en la raíz del proyecto, que reside en el espacio de nombres de UserAdministration . Luego hay una carpeta de Controllers , Models y Views (como un proyecto MVC normal) y debajo de la carpeta Views , nuevamente hay una carpeta de UserAdministration que contiene las vistas para el área.

También hay algo más que es muy importante para que funcionen las vistas incrustadas: tiene que registrar un nuevo motor de visualización en el método Application_Start de su archivo global.asax.cs , ¿hizo eso?

PortableAreaRegistration.RegisterEmbeddedViewEngine();

Y ... En su clase de registro, asegúrese de anular el método RegisterArea que toma 2 parámetros ( AreaRegistrationContext context IApplicationBus bus y IApplicationBus bus ), y llame 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 llama a la implementación base, debe al menos agregar un

RegisterAreaEmbeddedResources();

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