Asp.Net MVC: ¿Cómo obtengo Html.ActionLink para representar correctamente los valores enteros?

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

  •  02-07-2019
  •  | 
  •  

Pregunta

Tengo una aplicación mvc de asp.net con una ruta similar 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 método de acción de mi controlador se ve así:

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

En mi opinión, estoy haciendo algo como:

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

Mientras que la url que se genera con ActionLink funciona, usa variables de cadena de consulta en lugar de reescritura de URL.

Por ejemplo, produciría / blog / detail / my-slug? year = 2008 & amp; month = 7 & amp; day = 5 en lugar de / blog / detail / 2008/07/05 / my-slug

¿Hay alguna forma de que la versión genérica de ActionLink rellene correctamente los valores enteros para que la url salga como se esperaba?

Gracias

Jim

¿Fue útil?

Solución

En su lugar, sugeriría dar formato al Año, Mes y Día como cadenas. Piensa en esto: ¿harás algún cálculo matemático en estos " enteros " ;? Probablemente no, por lo que realmente no tiene sentido hacerlos enteros. Una vez que los tengas como cadenas, puedes forzar el formato cero inicial.

Otros consejos

El hecho de que sus parámetros sean enteros no tiene nada que ver con su problema. La definición de ruta que desea utilizar no se usa en realidad, por lo que la URL generada utiliza parámetros de cadena de consulta en lugar de crear la estructura que desea.

Las rutas se evalúan de arriba a abajo, por lo que es probable que tenga una definición de ruta más genérica que satisfaga la generación de URL solicitada. Intente mover la ruta que mostró en esta publicación a la parte superior de sus definiciones de ruta, y verá que su enlace generado es el que esperaría. Luego busque modificar sus definiciones de ruta para que sean más específicas, o simplemente muévalas según sea necesario.

La depuración de estos tipos de escenarios puede ser un gran dolor. Yo sugeriría descargar depurador de ruta de Phil Haack, Te hará la vida mucho más fácil.

scroll top