Áreas ASP MVC y ActionLink
-
22-08-2019 - |
Pregunta
Estoy trabajando en un nuevo proyecto en el que quiero utilizar la idea de Phil Haack Areas (1) + el ajuste de Steve Sanderson (2).Tengo una vista raíz simple con un enlace de acción para ver un área (Foo).La URL que se genera tiene el área adecuada, pero agrega el controlador raíz (Bar) al final.Aquí está mi código de vista raíz:
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
<h2>Index</h2>
<%= Html.ActionLink("Foo Index Page", "Index", new { area="Foo" } )%>
</asp:Content>
y aquí está la URL que genera:
localhost:6494/Foo/Bar
¿Alguna idea de por qué "/Bar" está ahí?
(1): haacked.com/archive/2008/11/04/areas-in-aspnetmvc.aspx
(2): blog.codeville.net/2008/11/05/app-areas-in-aspnet-mvc-take-2/
Solución
He encontrado una solución.No creo que sea apropiado, por lo que pediré una mejora.Al especificar un nombre de controlador, puedo hacer que la URL se forme correctamente.ES DECIR.
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
<h2>Index</h2>
<%= Html.ActionLink("Foo Index Page", "Index", new { area="Foo", controller="Baz" } )%>
</asp:Content>
Una vez que hice esto, la URL era correcta.
localhost:6494/Foo
¿Por qué es esto un problema?La demostración de Phil utiliza el controlador con el nombre HomeController.No sé (porque no puedo rastrear) cómo el método Html.ActionLink() construye la URL;pero parece que se basa en un caso predeterminado de HomeController existente, que no tengo.
Si alguien tiene alguna sugerencia sobre cómo permitir que los controladores que no se llaman Inicio sean los predeterminados, responda.Gracias
Otros consejos
Para no tener Home
como el nombre de controlador por defecto, simplemente cambiar la ruta por defecto .
@ Joe
En su App_Start / presentar RouteConfig.cs usted tiene que cambiar el valor por defecto para el controlador desde su casa a lo que quiera:
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "NAME_OF_YOUR_HOME_CONTROLLER", action = "Index", id = "" } // Parameter defaults
);