Pergunta

Eu tenho a seguinte rota, registrado no meu global.

routes.MapRoute(
    "Home", // Unique name
    "", // Root url
    new { controller = "Home", action = "Index", 
        tag = string.Empty, page = 1 }
);

kewl. quando eu iniciar o site, ele corretamente pega essa rota.

Agora, quando eu tento fazer programaticamente o seguinte, ele retorna NULL.

var pageLinkValueDictionary = 
    new RouteValueDictionar(linkWithoutPageValuesDictionary)
        {{"page", 2}};

VirtualPathData virtualPathData = 
    RouteTable.Routes.GetVirtualPath(viewContext, "Home"
        pageLinkValueDictionary);

// NOTE: pageLinkValueDictionary == 
//     Key: Action, Value: Index; Key: page, Value: 2

Por que isso estar acontecendo?

Eu estava sob a impressão de que iria encontrar o caminho de casa, mas acrescentar qualquer valor não encontrado como itens de seqüência de consulta?

Atualização

Ainda sem sorte com isso. Além disso, usando o MVC RC , agora eu preciso mudar a ViewContext para veiwContext.RequestContext .. que compila mas ainda estou recebendo um resultado nulo.

Update 2

Quando eu tiver a rota sem o item padrão page=1, a rota É ENCONTRADA . por exemplo.

routes.MapRoute(
        "Home",
        "",
        new { controller = "Post", action = "Index", tags = string.Empty }
    );

.. e RouteTable.Routes.GetVirtualPath retorna uma instância VirtualPathData. Quando eu adiciono o page=1 (valor padrão) de volta, a instância VirtualPathData retornado é nulo?

Foi útil?

Solução

Bem, a razão que retorna nulo é porque não há nenhuma rota com uma "página" de dados de rota.

Você poderia expandir um pouco sobre o que você está tentando alcançar? Se você quer redirecionar para uma página com a URL / page / 2 ou / page = 2, então você deve estar usando RedirectToRoute ou RedirectToAction:?

return RedirectToRoute("IndexDefault", new {page = "2"}); 

Outras dicas

Eu acho que o seu percurso deve ser assim:

route.MapRoute("theRoute", "{controller}/{action}/{tag}/{page}",
  new { controller="Post", action="Index", tag="", page=1 });

ou (dependendo do que o URL completo deve ser semelhante) ...

route.MapRoute("theRoute", "/{tag}/{page}",
  new { controller="Post", action="Index", tag="", page=1 });

Esta continua a corresponder a um pedido para http://mysite.com/ e vá para seus valores rota padrão definido acima. Mas agora, quando você especificar um tag ou página, você terá a URL que você queria.

Você deve verificar se Route Tester de Phil:

ASP.NET Routing Debugger

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