Pergunta

Estou tentando descobrir como lidar com o seguinte cenário. Em geral, tenho um monte de discos em uma tabela. Tudo isso tem campos de identificação e pai para formar uma árvore.

Page1
 - Page2
 - Page3
Page4
 - Page5
 -- Page6

Agora, quero que minhas rotas para a página3 e a página6 sejam como /Page1/Page6 e /Page3/Page5/Page6 respectivamente. Ou seja, quero incluir todos os pais no URL.

Como definir minha ação/roteamento do controlador para alcançar o resultado acima?

EDIT: Esqueci de mencionar que a estrutura acima será dinâmica - os nós podem ser adicionados/excluídos/alterar pai, etc.

Foi útil?

Solução

Você pode usar uma partida curinga.

Uma possível rota:

routes.MapRoute("SomeName", "{*Page}", new { controller = "ControllerName", action = "ActionName" });

E na ação aceita a página da string e analise manualmente, talvez com uma divisão?

Isso também pode ser útil: Roteamento de URL

Outras dicas

Observe que o nome e a ação do controlador são fixos e não são baseados no URL.

// place the more specific route first
routes.MapRoute("r1", "{parent}/{child}/{subchild}", 
    new { controller = "Page", action = "Index", parent = parent, child = child, subchild = subchild });

routes.MapRoute("r2", "{parent}/{child}", 
    new { controller = "Page", action = "Index", parent = parent, child = child });


public class PageController
{
    public ActionResult Index(string parent, string child, string? subchild)
    {
        // stuff
    }
}

Você deveria usar

routes.MapRoute("Page6", "Page3/Page5/Page6", new { controller = "Page6", action = "Index" });

Ou talvez usando roteamento de expressão regular

http://blog.sb2.fr/post/2009/01/03/regular-expression-maproute-with-aspnet-mvc.aspx

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top