Asp.Net MVC: como faço para obter Html.ActionLink para tornar valores inteiros corretamente?

StackOverflow https://stackoverflow.com/questions/146367

  •  02-07-2019
  •  | 
  •  

Pergunta

Eu tenho um aplicativo mvc asp.net com uma rota semelhante a:

routes.MapRoute("Blog", 
    "{controller}/{action}/{year}/{month}/{day}/{friendlyName}",                          
    new { controller = "Blog", action = "Index", id = "", friendlyName="" }, 
    new { controller = @"[^\.]*", 
          year = @"\d{4}", 
          month = @"\d{2}", 
          day = @"\d{2}" }
);

meu controlador de assinatura método de ação é semelhante a:

public ActionResult Detail(int year, int month, int day, string friendlyName)
{ // Implementation... }

A meu ver, eu estou fazendo algo como:

<%= Html.ActionLink<BlogController>(item => item.Detail(blog.PostedOn.Year, blog.PostedOn.Month, blog.PostedOn.Day, blog.Slug), blog.Title) %>

Enquanto a url que é gerado com obras actionlink, ele usa consulta variáveis ??de cadeia em vez de reescrita de URL.

Por exemplo, produziria / blog / detail / my-lesma? Ano = 2008 & mês = 7 & day = 5 em vez de / blog / detail / 2008/07/05 / my-lesma

Existe uma maneira de obter a versão genérica do ActionLink para adequadamente pad os valores inteiros para que a url sai como o esperado?

Graças

Jim

Foi útil?

Solução

Gostaria de sugerir a formatação do ano, mês e dia como cordas em seu lugar. Pense sobre isso: que você vai fazer qualquer matemática sobre essas "inteiros"? Provavelmente não, então não há realmente nenhum ponto para torná-los inteiros. Depois de tê-los como cordas você pode forçar o formato de zero à esquerda.

Outras dicas

O fato de que seus parâmetros são inteiros não tem nada a ver com seu problema. A definição rota que deseja ser usado não está realmente sendo usado, que é por isso que a URL gerada é usando parâmetros de string de consulta em vez de construir a estrutura que você deseja.

As rotas são avaliadas de cima para baixo, então você provavelmente tem uma definição de rota mais genérica que está satisfazendo sua geração URL solicitado. Tente mover a rota que você exibido neste post para o topo de suas definições de rotas, e você verá que o seu link gerado é como seria de esperar. Em seguida, olhar para modificar as definições de rotas, quer ser mais específico, ou simplesmente movê-los, se necessário.

Depuração estes tipos de cenários pode ser uma dor enorme. Eu sugiro fazer o download de Phil Haack rota depurador , ele vai fazer a sua vida muito mais fácil.

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