Asp.Net MVC: Come posso ottenere Html.ActionLink per rendere correttamente i valori interi?

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

  •  02-07-2019
  •  | 
  •  

Domanda

Ho un'applicazione asp.net mvc con un percorso simile 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}" }
);

La firma del mio metodo di azione del controller è simile a:

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

A mio avviso, sto facendo qualcosa del tipo:

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

Mentre l'URL generato con ActionLink funziona, utilizza le variabili della stringa di query anziché la riscrittura dell'URL.

Ad esempio, produrrebbe / blog / detail / my-slug? year = 2008 & amp; month = 7 & amp; day = 5 invece di / blog / detail / 2008/07/05 / my-slug

C'è un modo per ottenere la versione generica di ActionLink per riempire correttamente i valori interi in modo che l'URL esca come previsto?

Grazie

Jim

È stato utile?

Soluzione

Suggerirei invece di formattare l'anno, il mese e il giorno come stringhe. Pensa a questo: farai qualche matematica su questi "numeri interi"? Probabilmente no, quindi non ha davvero senso trasformarli in numeri interi. Una volta che li hai come stringhe puoi forzare il formato zero iniziale.

Altri suggerimenti

Il fatto che i tuoi parametri siano numeri interi non ha nulla a che fare con il tuo problema. La definizione del percorso che si desidera utilizzare non viene attualmente utilizzata, motivo per cui l'URL generato utilizza i parametri della stringa di query invece di creare la struttura desiderata.

I percorsi vengono valutati dall'alto verso il basso, quindi probabilmente hai una definizione di percorso più generica che soddisfa la generazione di URL richiesta. Prova a spostare il percorso visualizzato in questo post in cima alle definizioni del percorso e vedrai che il link generato è come ti aspetteresti. Quindi cerca di modificare le definizioni del tuo percorso in modo che siano più specifiche o spostale se necessario.

Il debug di questi tipi di scenari può essere un grosso problema. Suggerirei di scaricare route debugger di Phil Haack, ti renderà la vita molto più semplice.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top