Por que o Routelink gera URL amigável enquanto o ActionLink não?
-
20-09-2019 - |
Pergunta
Eu tenho uma pergunta sobre o Routelink vs. ActionLink.
Considere a seguinte rota
routes.MapRoute("Routename1",
"{someEnum}/SpecificAction/{id}/{stringId}",
new { controller = "MyController", id = (int?)null, stringId= (string)null, action = "SpecificAction" },
new { someEnum= "(EnumVal1|EnumVal2)" }
);
A parte estranha {algumenum} é porque eu uso um controlador geral para todos os valores de uma enumeração que formam a parte do controlador típico de um URL. Por exemplo,/enumval1/ação/e/enumval2/ação/use o mesmo controlador. Isso não faz parte do problema, no entanto.
Considere as duas maneiras a seguir de vincular:
<%=Html.RouteLink("Click me","Routename1", new { id = 32, stringId = "Yatzy" })%>
<%=Html.ActionLink("Click me", "SpecificAction", "EnumVal1", new { id = 32, stringId = "Yatsy" }, null)%>
O Routelink gera o URL correto, que seria/enumval1/specificaction/32/yatzy
O ActionLink gera um URL que se parece/enumval1/specificaction/32? Stringid = yatzy
Por que é isso? Alguém poderia me explicar isso, por favor.
Solução
RouteLink
só pode usar a única rota que você especificar. ActionLink
Usará a primeira rota correspondente, seja a que você pretendia ou não. Seus dois exemplos provavelmente estão combinando rotas diferentes.
Depurador de roteamento de Phil Haack ajudaria a esclarecer isso.