Usuário com melhor resposta
Como montar rota com nome e id?

Pergunta
-
Olá estou com a seguinte situação.
Montei minha roda da seguinte forma
'Rota com o nome do veículo routes.MapRoute( _ "Modelos", _ "{controller}/{action}/{nomeVeiculo}/{id}", _ New With {.controller = "VeiculosNovos", .action = "Modelo", .nomeVeiculo = UrlParameter.Optional, .id = UrlParameter.Optional} _ )
Dai para listar usei o seguinte
<%= Html.ActionLink("Details", "Modelo", New With { .id = item.VUVEINOVOS_ID,.nomeVeiculo = item.VUVEINOVOS_MODELO})%>
isso retorna para mim o seguinte
http://localhost:4485/VeiculosNovos/Modelo/1?nomeVeiculo=Gol
o que eu gostaria era que retornasse o seguinte
http://localhost:4485/VeiculosNovos/Modelo/Gol/1
Pesquisei um bocado e ainda não encontrei a solução, como resolvo isso?
Respostas
-
Não me pergunte porque mas só funcionou da seguinte forma.
routes.MapRoute( _ "Modelos", _ "VeiculosNovos/Modelo/{nomeVeiculo}/{cod}", _ New With {.controller = "VeiculosNovos", .action = "Modelo", .nomeVeiculo = UrlParameter.Optional, .cod = UrlParameter.Optional} _ )
e executando a chamada assim
Muito Obrigado pela força!<%= Html.RouteLink("detalhes","Modelos", New With {.nomeVeiculo = item.VUVEINOVOS_MODELO, .cod = item.VUVEINOVOS_ID})%>
- Marcado como Resposta Mauro Couto sábado, 20 de novembro de 2010 01:38
Todas as Respostas
-
Fala Mauro,
Quase sempre quando queremos criar novas Route Definitions temos esse tipo de problema... Uma forma de "debuggar" Route Definitions é usando o Routing Debugger do Haack...
No seu caso, essa sua Route Definition deve estar definida "depois" da Route Definition "default"... Se for isso mesmo, coloque-a "antes" da Route Definition "default", ou então mude a sua Route Definition para:
'Rota com o nome do veículo
routes.MapRoute( _
"Modelos", _
"VeiculosNovos/{action}/{nomeVeiculo}/{id}", _
New With {.action = "Modelo", .nomeVeiculo = UrlParameter.Optional, .id = UrlParameter.Optional} _
)
Isso seria ruim se você pretendia "aproveitar" essa Route Definition para outros Controller's, porque então você teria que "repetir" essa Route Definition para os outros Controller's... Mas de qualquer forma, funciona...
Forte abraço,
André Borges Medeiros
MCT, MCPD, MCTS
Procurando treinamento de ASP.NET MVC?
>> Se a resposta solucionar sua dúvida, favor Votar como Útil -
Olá André muito obrigado pela resposta, porém quando passo a rota para antes da default ele exibe o seguinte erro logo de cara assim que eu tento executar.
The parameters dictionary contains a null entry for parameter 'id' of non-nullable type 'System.Int32' for method 'System.Web.Mvc.ActionResult Modelo(System.String, Int32)' in 'siteRodacMVC.siteRodacMVC.VeiculosNovosController'. An optional parameter must be a reference type, a nullable type, or be declared as an optional parameter. Parameter name: parameters
Usando o Router Tester o resultado para essa rota é True, porem a url continua sendo gerada da mesma forma.
Se eu modifico para "VeiculosNovos/{action}/{nomeVeiculo}/{id}", o resultado só é true se eu dito o caminho na barra assim dessa forma VeiculosNovos/Modelo/gol/1 ai retorna o seguinte erro.
The RouteData must contain an item named 'controller' with a non-empty string value.
Estou tentando gerar a roda da seguinte forma
<%= Html.ActionLink("Detalhes", "Modelo", New With {.nomeVeiculo = item.VUVEINOVOS_MODELO, .id = item.VUVEINOVOS_ID})%>
- Editado Mauro Couto sábado, 20 de novembro de 2010 01:00 Melhoria da formatação
-
Não me pergunte porque mas só funcionou da seguinte forma.
routes.MapRoute( _ "Modelos", _ "VeiculosNovos/Modelo/{nomeVeiculo}/{cod}", _ New With {.controller = "VeiculosNovos", .action = "Modelo", .nomeVeiculo = UrlParameter.Optional, .cod = UrlParameter.Optional} _ )
e executando a chamada assim
Muito Obrigado pela força!<%= Html.RouteLink("detalhes","Modelos", New With {.nomeVeiculo = item.VUVEINOVOS_MODELO, .cod = item.VUVEINOVOS_ID})%>
- Marcado como Resposta Mauro Couto sábado, 20 de novembro de 2010 01:38