Problemas de enrutamiento de MVC, áreas y enlaces de acción HTML

He buscado esto por un tiempo y parece que las soluciones deberían funcionar, parece que lo estoy haciendo mal.

Creé un área para administrar el lado del CMS llamada "administrar", así que si vas a:

/Administrar/Viña

le dará una lista de viñedos para administrar usando VinyardController construido con el andamio CRUD.

En el "front-end" tengo un controlador de navegación y otro VinyardController para ver los detalles de un viñedo.

Así que alguien va a

/Explorar/Viña

les da una lista de Vinyards, hacen clic en uno (aquí está el problema) quiero que vaya a

/Viña/NombreDeViña

La ruta que tengo es:

      routes.MapRoute(
            "Vinyard",
            "Vinyard/{Name}",
            new { controller = "VinyardController", action = "Details", area="root"}
            );

Que está por encima de la ruta predeterminada. Detalles es el método que muestra los detalles de Vinyard.

el HTML.actionlink que estoy usando es:

 @Html.ActionLink(item.Name, "Details", "vinyard" ,new { name = item.VinyardId, area="root" })

por alguna razón, la etiqueta que se devuelve es: /Browse/Details?Length=7

Además de eso, cuando trato de navegar a /vinyard/1 me da un 404.

Gracias por su ayuda!

Actualización: si busco /vinyard/details/1, funciona correctamente, excepto que quiero evitar la parte /details/.

preguntado el 27 de julio de 12 a las 17:07

2 Respuestas

Use sobrecarga

public static MvcHtmlString ActionLink(
    this HtmlHelper htmlHelper,
    string linkText,
    string actionName,
    string controllerName,
    Object routeValues,
    Object htmlAttributes
)

Así que cambia tu código a

 @Html.ActionLink(item.Name, "Details", "vinyard" ,
                 new { name = item.VinyardId, area="root" },null)

Respondido 27 Jul 12, 17:07

Eso me dio solo /browse/ para todas mis entradas. Por alguna razón, no se diferencia entre los diferentes elementos que no sean el nombre del enlace. - Quemado por la nieve

Arreglado. Trabajando con el enlace de acción modificado de Shyju, pero también eliminé la propiedad del área y tuve que arreglar la ruta del mapa para que funcionara correctamente.

Mi global.ascx ahora se ve así:

        routes.MapRoute(
            "Vinyard",
            "Vinyard/{id}",
            new { controller = "Vinyard", action = "Details", id=UrlParameter.Optional},
            new[] { "MyNameSpace.Controllers" }
            );

Los dos problemas eran: el nombre de mi controlador debía ser "Vinyard" y no "VinyardController" y necesitaba agregar el espacio de nombre aquí y en el registro de ruta de mi área, ya que estaba usando los mismos nombres de clase en ambas áreas.

Respondido 29 Jul 12, 03:07

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.