ActionLink en forma de Ruteo por parametros en vez de QueryString

publicado por: Anonymous

Estoy intentando hacer que al utilizar un ActionLink con múltiples parámetros me me genere un link de la forma

{Controller}/{Action}/{idCompania}/{idLocal}/{fecha}

Pero siempre me genera una querystring:

{Controller}/{Action}?idCompania=0&idLocal=21&fecha=23-12-2015

En el global.asax tengo:

routes.MapRoute(
            "UltimosInformesDetail",
            "UltimosInformes/Details/{idCompania}/{idLocal}/{fecha}",
            new { controller = "UltimosInformes", 
                  action = "Details", 
                  idCompania="", 
                  idLocal="", 
                  fecha="" },
            null
)

Mi ActionLink en la vista:

<td>
    @Html.ActionLink("Detalle", 
                     "Details",
                     "UltimosInformes", 
                     new { idCompania = item.Compania, 
                           idLocal    = item.Local.Codigo, 
                           fecha      = item.Fecha.ToString("dd-MM-yyyy")}, null)
</td>

Mi controller:

    public ActionResult Details(short idCompania, short idLocal,string fecha)
    {
        var s = RootContext.Instance.Resolve<ProblemaService>();

        return View(s.ObtenerAuditoresVisita(idCompania, idLocal, DateTime.Parse(fecha)));
    }

Investigué en SO en inglés ver aquí y aquí Pero no pude resolverlo

No logro hacer que genere el link “ruteado” siempre me genera una querystring

solución

He probado tu ruta y la sintaxis esta bien.

Lo único que posiblemente genere el error es que la ruta "UltimosInformesDetail" que has creado la has registado después que la ruta por defecto

Siempre deben ir las rutas más especificas primero, luego las más generales y al final (si todavía la necesitas) la ruta por defecto.

routes.MapRoute(
    "UltimosInformesDetail",
    "UltimosInformes/Details/{idCompania}/{idLocal}/{fecha}",
    new
    {
        controller = "UltimosInformes",
        action = "Details",
        idCompania = "",
        idLocal = "",
        fecha = ""
    },
    null
);

routes.MapRoute(
    name: "Default",
    url: "{controller}/{action}/{id}",
    defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
Respondido por: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *