2010-09-16 13 views
8

Me gustaría crear una estructura de proyecto con áreas anidadas. Por ejemplo, tengo un área de "Inicio" y debajo de esto me gustaría que el área de "Noticias" maneje su propio registro de ruta y encuentre las vistas correctamente cuando una ruta apunta a un controlador en el área "Noticias". Al cambiar el nombre del área "Noticias" para que sea "Inicio/Noticias" en lugar de simplemente "Noticias", se encuentran las vistas adecuadas. En Global.asax.cs principal, instanciando todas las áreas ("Inicio" y "Noticias") y registrándolas individualmente porque la función RegisterAllAreas() solo encuentra áreas de un nivel de profundidad (es decir, solo encuentra y registra el "Inicio " zona).¿Es posible anidar áreas en ASP.NET MVC 2?

¿Alguien más ha intentado con algo similar? ¿Es este un truco importante o puede ser una solución estable a largo plazo? Cualquier consejo que puedas ofrecer es muy apreciado.

+0

Una de las ventajas de ASP.NET MVC es que las URL son más simples y legibles por humanos. Mientras más anides áreas, más largas serán las URL y menos amigables serán. ¿Realmente necesitas anidar? Solo un pensamiento (y lo siento, no sé la respuesta a tu pregunta). –

Respuesta

1

Creo que crear algo como esto con los Controladores no será un problema, ya que se encuentran utilizando el espacio de nombres.

El problema es con las vistas.

De forma predeterminada, el enrutamiento MVC (a través de ViewEngine) solo utiliza los valores de Área, Controlador y Vista en la colección RouteData.

Esto se implementa en VirtualPathProviderViewEngine en los métodos FindView virtuales (y utilizando GetPath no virtual). Deberá anular los métodos FindView en su ViewEngine.

No es una cantidad muy grande o complicado de código, pero lo mejor está pasando por la fuente y husmear, porque hay algo de caché de dar vueltas y algunas otras cosas ...

4

Puede hacerlo con MvcCodeRouting, un proyecto CodePlex de código abierto seprate.

MvcCodeRouting crea automáticamente las mejores rutas posibles para su aplicación ASP.NET MVC.

  1. Organice sus controladores usando espacios de nombres (no hay más áreas) que puede ir tan profundamente como usted quiere.
  2. Restricciones predeterminadas para los tipos primitivos que pueden ser modificados por parámetro o por sitio.
  3. Agrupación inteligente de rutas similares para una coincidencia eficiente.
  4. Compatibilidad con un controlador raíz.
  5. Detección de rutas ambiguas.
  6. Formateo de rutas (por ejemplo, en minúsculas).
  7. Renderice sus rutas como llamadas al método de extensión MapRoute, para la depuración.
  8. Utilice la misma ruta base basada en el espacio de nombres para organizar sus Vistas.
+0

+1 como enlace útil, pero en general las respuestas que son solo enlaces a otro sitio son mucho mejores cuando tienen algún texto explicativo adicional o al menos una buena cita relevante del enlace. Agregué una cita y destaqué la parte relevante que realmente responde la pregunta. –

+0

@Samuel Neff: Gracias por la edición, respondí de prisa. –

Cuestiones relacionadas