Pergunta

Em um site ASP.NET MVC (BETA) que estou desenvolvendo, às vezes, chamadas para o ActionLink retornarão para mim URLs que contêm seqüências de consultas. Isolei as circunstâncias que produzem esse comportamento, mas ainda não entendo por que, em vez de produzir um URL limpo, ele decide usar um parâmetro de sequência de consulta. Eu sei que funcionalmente eles são iguais, mas por consistência (e aparência) dos URLs, isso não é o que eu quero.

Aqui estão minhas rotas:

routes.MapRoute(
    "Photo Gallery Shortcut",
    "group/{groupname}",
    new { controller = "Photos", action = "All", Id = "" });

routes.MapRoute(
    "Tagged Photos", //since the Tagged action takes an extra parameter, put it first
    "group/{groupname}/Photos/Tagged/{tagname}/{sortby}",
    new { controller = "Photos", action = "Tagged", Id = "", SortBy = "" });

routes.MapRoute(
    "Photo Gallery", //since the Gallery's defualt action is "All" not "Index" its listed seperatly
    "group/{groupname}/Photos/{action}/{sortby}",
    new { controller = "Photos", action = "All", Id = "", SortBy = "" });

routes.MapRoute(
    "Group",  //<-- "Group" Category defined above
    "group/{groupname}/{controller}/{action}/{id}",
    new {controller = "Photos", action = "Index", Id = ""});

Agora, o problema ocorre apenas quando estou olhando para a vista descrita pela rota chamada "Tagged Photos" e execute o ActionLink via:

Html.ActionLink<PhotosController>(p => p.All((string)ViewData["group"], ""), "Home")

Que produz o URL:

http://domain/group/GROUPNAME?sortBy=

http://domain/group/GROUPNAME

Eu derrubei Phil's Depurador de roteamento do ASP.NET, e tudo aparece em ordem. Este me fez perseguir. Alguma ideia?

Foi útil?

Solução

Não sei por que visões diferentes estão produzindo URLs diferentes.

Mas você pode se livrar desse param Sortby atribuindo um valor padrão à primeira rota.

novo {Sortby = ""}

Durante a geração, se Sortby corresponder ao padrão, o mecanismo de rota pulará esse parâmetro (se estiver na sequência de consultas).

Outras dicas

Você terá que usar rotas nomeadas aqui, não rotas de ação, devido à maneira como o roteamento funciona no ASP.NET, porque ele "primeiro corresponde", não "melhor correspondência".

Eu acho que está pegando sua primeira rota. Também tem a ação tudo. E porque o Sortby não está especificado, está expondo -o como um parâmetro de falha

Isso ainda funcionará com o método de ação 'All' no PhotoScontroller, porque apenas preenche o parâmetro Sortby com o valor da string de consulta.

No depurador da rota, ele está executando a 3ª rota ou a 1ª?

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