none
Como montar rota com nome e id? RRS feed

  • 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?

    sexta-feira, 19 de novembro de 2010 02:07

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

    <%= Html.RouteLink("detalhes","Modelos", New With {.nomeVeiculo = item.VUVEINOVOS_MODELO, .cod = item.VUVEINOVOS_ID})%>
    
    Muito Obrigado pela força!

    • Marcado como Resposta Mauro Couto sábado, 20 de novembro de 2010 01:38
    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
    sexta-feira, 19 de novembro de 2010 11:26
    Moderador
  • 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})%>
    
    Seria ai que está o erro?

     

    • Editado Mauro Couto sábado, 20 de novembro de 2010 01:00 Melhoria da formatação
    sábado, 20 de novembro de 2010 00:58
  • 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

    <%= Html.RouteLink("detalhes","Modelos", New With {.nomeVeiculo = item.VUVEINOVOS_MODELO, .cod = item.VUVEINOVOS_ID})%>
    
    Muito Obrigado pela força!

    • Marcado como Resposta Mauro Couto sábado, 20 de novembro de 2010 01:38
    sábado, 20 de novembro de 2010 01:38