c# - vista - Asp.Net MVC: ¿Cómo obtengo Html.ActionLink para representar valores enteros correctamente?
pasar parametros por url mvc c# (2)
Tengo una aplicación asp.net mvc 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, utiliza variables de cadena de consulta en lugar de reescritura de URL.
Por ejemplo, produciría / blog / detail / my-slug? Year = 2008 & month = 7 & day = 5 en lugar de / blog / detail / 2008/07/05 / my-slug
¿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
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 el depurador de rutas de Phil Haack, hará que tu vida sea mucho más fácil.
Sugeriría formatear el año, el mes y el día como cadenas. 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.