2011-06-27 6 views
11

He creado algunos tipos de contenido personalizado que incluyen la parte de ruta para que mis administradores de contenido puedan editar las babosas para los artículos. No estoy teniendo suerte configurando una ruta que permita que un controlador propio sirva solicitudes para estos artículos.pregunta de enrutamiento cms de huerta

La ruta de acceso a ItemController en el módulo central Routable tiene una prioridad de 10. He intentado hacer una ruta que utiliza un IRouteConstraint, similar a cómo el módulo Blog logra lo que quiero hacer, con una prioridad más baja pero todavía sin suerte.

Si hago que mis URL terminen con un/entonces mi ruta personalizada se activa, ya que no coincide con la ruta de mis elementos de contenido. Esta no es una solución deseable. No puedo entender por qué no descubrirá mi ruta personalizada antes de la que pertenece al módulo Enrutable.

Cualquier ayuda sería muy apreciada, muchas gracias de antemano.

ACTUALIZACIÓN:
Aquí es mi método GetRoutes de mi aplicación IRouteProvider:

public IEnumerable<RouteDescriptor> GetRoutes() 
    { 
     return new[] { 
      new RouteDescriptor 
      { 
       Priority = 0, 
       Route = new Route(
        "Admin/Jugganort/{controller}/{action}/{id}", 
        new RouteValueDictionary { 
               {"area", "Jugganort"}, 
               {"controller", "Area"}, 
               {"action", "List"} 
              }, 
        new RouteValueDictionary(), 
        new RouteValueDictionary { 
               {"area", "Jugganort"} 
              }, 
        new MvcRouteHandler()) 
      }, 
      new RouteDescriptor 
      { 
       Priority = 9, 
       Route = new Route(
        "{location}/{merchant}/{promotion}", 
        new RouteValueDictionary { 
               {"area", "Jugganort"}, 
               {"controller", "Home"}, 
               {"action", "Index"}, 
               {"merchant", UrlParameter.Optional}, 
               {"promotion", UrlParameter.Optional} 
              }, 
        new RouteValueDictionary { 
         { "location", _routeConstraint } 
        }, 
        new RouteValueDictionary { 
               {"area", "Jugganort"} 
              }, 
        new MvcRouteHandler()) 
      } 
     }; 
    } 

_routeConstraint es una implementación sencilla de IRouteConstraint que sólo se ve un valor codificado de "Newcastle" para la ubicación de la ruta.

¿Mi comprensión de la RoutePart no es correcta? ¿Tendrán que servir esos artículos desde el ItemController del módulo enrutable? ¿Mi única opción es el usuario alternativo para renderizar formas personalizadas?

Los foros de orchard serán mi próximo punto de llamada. Gracias de nuevo por cualquier ayuda que pueda brindar.

+0

te puedo ayudar con esto, pero necesito más detalles. ¿Cómo alimentas la babosa, la ruta, la ruta, las propiedades del título para cada elemento de contenido? si su problema es solo el "/" al final, lo siento, pero creo que tendrá que lidiar con eso. De todos modos, debería considerar plantear sus problemas en los foros oficiales del huerto donde están activos (los miembros oficiales del equipo del huerto): http://orchard.codeplex.com/discussions/ – Proviste

+0

¿Puede publicar su RouteProvider.cs? – mdm

+0

ver la actualización anterior @mdm – Brendan

Respuesta

7

Puede servir esos artículos desde su propio controlador también, seguro. Lo único que se necesita es una ruta que llegue a tu controlador. Entonces, puede devolver casi todo lo que quiera :)

Parece que sus direcciones URL están siendo equivalentes por alguna otra ruta. Si desea anular la ruta predeterminada y asegurarse de que su primera se comparó primero, debe especificar como una prioridad más alta (por ejemplo, 11). La ruta general en Orchard.Core.Routable.Routes tiene una prioridad de 10, por lo que capturará incluso las URL que coincidan con sus rutas.

No ha proporcionado un valor predeterminado para la identificación en la primera ruta, eso también puede ser un problema. Si no especificas explícitamente la identificación en una URL, no se coincidirá.

Por cierto, es Área un nombre propio para el controlador predeterminado en la primera ruta, o simplemente un error tipográfico?

+0

Gracias pszmyd, pero mi ruta todavía no está activada con una prioridad de 11. Se detectará en ~/newcastle/por ejemplo, pero no ~/newcastle que es el valor de RoutePart.Path para el contenido ít. ¿Estoy haciendo algo más mal? Tengo un AreaController que uso para mis pantallas de tipo administrador, ¿no es una buena idea que piense? – Brendan

+0

Resulta que 15 fue el número mágico. Sería bueno si las herramientas de diseño pudieran indicarle a qué ruta se dirigió la solicitud actual. Gracias pszmyd, apoyos para tu blog también, lo he encontrado muy útil. – Brendan

+0

@Brendan: Route Debugging es algo que Orchard realmente necesita. Hay un boleto abierto en http://orchard.codeplex.com/workitem/17287 - cuantos más votos tenga, mayor será la probabilidad de que se implemente. @Pszmyd: Has escrito módulos para casi todo lo demás concebible ¿por qué no esto? :-p – mdm