Cómo modelar este escenario de navegación con la ruta eficiente y ASP.NET mapa del sitio?
-
19-09-2019 - |
Pregunta
i necesidad de modelar el siguiente escenario, pero no puedo hacerlo funcionar con el MvcSitemapProvider (creo que mi problema también se correlaciona directamente con la SiteMapProvider por defecto). Quiero conseguir el pan rallado por defecto controlan para trabajar correctamente con mi dinámico de datos.
tengo una lista de products
que se agrupan por category
que tienen un parent-category
- ParentCategory
- Categoría
- Producto
Quiero ser capaz de utilizar la siguiente URL (s):
(1) / Productos
(2) / Productos / MainCategory
(3) / Productos / MainCategory / Categoría
(4) / Productos / MainCategory / Categoría / Producto
Es evidente que mi solución a continuación no es óptimo.
El nodo Products
en el mapa del sitio no tiene ChildNodes, por lo que no se mostrará en mi menú.
He creado un objeto intermediario que suma las maincategories y categorías por lo que aparecen en mi menú. Pero esto no va a solucionar el problema como otros controles (pan rallado) acaba de decir que estoy en / Productos.
¿Debo cambiar mis rutas o cambiar mi definición del sitio? O tal vez algo más?
Actualmente tengo el siguiente:
- 2 Rutas
1 para el / los productos, / Productos / MainCategory y / Productos / MainCategory / Categoría -> asignación a ProductsController.Index ()
1 para / Productos / MainCategory / Categoría / Producto -> mapeo a ProductsController.Product () - 1 entrada en el mapa del sitio
con dynamicParameters definidos (MainCategory; Categoría)
definición Global.asax Ruta:
routes.MapRoute( _
"Product", _
"Products/{MainCategoryName}/{CategoryName}/{ProductName}", _
New With {.controller = "Products", .action = "Product"} _
)
routes.MapRoute( _
"Products", _
"Products/{MainCategoryName}/{CategoryName}", _
New With {.controller = "Products", .action = "Index", .GroupName = "", .CategoryName = ""} _
)
tengo las siguientes entradas en mi mapa del sitio:
<?xml version="1.0" encoding="utf-8" ?>
<siteMap>
<mvcSiteMapNode controller="Home" action="Index" title="Home" description="Homepage">
<mvcSiteMapNode controller="Products" action="Index" title="Products" description="" isDynamic="true" dynamicParameters="MainCategoryName;CategoryName" />
</mvcSiteMapNode>
</siteMap>
Solución
Actualmente estoy usando un SiteMapProvider
personalizado. Todavía estoy manteniendo también rutas personalizadas que son de ninguna manera relacionada.