2008-09-28 13 views
5

Tengo una aplicación asp.net mvc con una ruta similar a:Asp.Net MVC: ¿Cómo obtengo Html.ActionLink para representar valores enteros correctamente?

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}" } 
); 

Mi firma del método de acción del controlador se parece a:

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, utiliza variables de cadena de consulta en lugar de reescritura de URL.

Por ejemplo, produciría/blog/detalle/mi-babosa? Años = 2008 & mes = 7 & días = 5 en lugar de/blog/detalle/2008/07/05/mi-babosa

¿Hay alguna manera de obtener la versión genérica de ActionLink para rellenar correctamente los valores enteros de modo que la url salga como se espera?

Gracias

Jim

Respuesta

2

que sugeriría el formateo del Año, Mes y Día como cadenas vez. Piensa en esto: ¿Harás matemáticas en estos "enteros"? Probablemente no, así que realmente no tiene sentido convertirlos en enteros. Una vez que los tiene como cadenas, puede forzar el formato cero inicial.

+0

Si bien no es una solución óptima, sí sé que esto funcionará –

4

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 está utilizando 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 hacia 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. Intenta mover la ruta que mostrabas en esta publicación a la parte superior de las definiciones de tu ruta, y verás que tu enlace generado es el que esperas. Luego, considere modificar las 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. Sugiero descargar Phil Haack's route debugger, hará su vida mucho más fácil.

+0

La ruta está en la parte superior, sin rodeos. Echaré un vistazo al depurador, sin embargo. –

Cuestiones relacionadas