Como modelar este cenário de navegação com a rota eficiente e ASP.NET Sitemap?
-
19-09-2019 - |
Pergunta
eu preciso para modelar o seguinte cenário, mas não posso fazê-lo funcionar com o MvcSitemapProvider (eu acho que o meu problema também mapeia diretamente para o SiteMapProvider padrão). Eu quero começar a farinha de rosca padrão controlar para funcionar corretamente com os meus dados dinâmicos.
Eu tenho uma lista de products
que são agrupados por category
que têm uma parent-category
- ParentCategory
- Categoria
- produtos
Eu quero ser capaz de usar o seguinte URL (s):
(1) / Produtos
(2) / Produtos / MainCategory
(3) / Produtos / MainCategory / Categoria
(4) / Produtos / MainCategory / Categoria de Produto /
Obviamente minha solução abaixo não é o ideal.
O nó Products
no Sitemap não tem ChildNodes, então eles não vão aparecer na minha Menu.
Eu criei um objeto intermediário que agrega os maincategories e categorias para que eles aparecem na minha menu. Mas isso não vai resolver o problema como outros controles (pão ralado) apenas dizer que estou em / produtos.
Devo mudar minhas rotas ou mudar a minha definição Sitemap? Ou talvez algo mais?
Eu tenho atualmente o seguinte:
- 2 Rotas
1 para / Produtos, / Produtos / MainCategory e / Produtos / MainCategory / Categoria -> mapeamento para ProductsController.Index ()
1 para / Produtos / MainCategory / categoria / produto -> mapeamento para ProductsController.Product () - 1 entrada no Mapa do Site
com dynamicParameters definidos (MainCategory; Categoria)
definição Global.asax Route:
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 = ""} _
)
Eu tenho as seguintes entradas no meu mapa do site:
<?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>
Solução
Atualmente estou usando um SiteMapProvider
personalizado. Eu ainda estou também a manutenção de rotas personalizadas são de forma alguma relacionado.