ASP MVC Aree e ActionLink
-
22-08-2019 - |
Domanda
Sto lavorando a un nuovo progetto in cui voglio usare Phil Haack Areas (1) idea + ritocco di Steve Sanderson (2). Ho una semplice vista di base con un collegamento ricorso ad una vista un'area (Foo). L'URL che viene generato ha la zona corretta, ma aggiunge il controller principale (Bar) alla fine. Ecco il mio codice della vista root:
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
<h2>Index</h2>
<%= Html.ActionLink("Foo Index Page", "Index", new { area="Foo" } )%>
</asp:Content>
ed ecco l'URL che genera:
localhost: 6494 / Foo / Bar
Qualsiasi idea del perché il "/ Bar" è lì?
(1): haacked.com/archive/2008/ 11/04 / aree-in-aspnetmvc.aspx
(2): blog .codeville.net / 2008/11/05 / app-aree-in-aspnet-MVC-take-2 /
Soluzione
Ho trovato una soluzione. Non credo sia opportuno, quindi mi chiedere un miglioramento. Specificando un nome del controller, posso ottenere l'URL per formare in modo corretto. Cioè.
<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 volta che ho fatto questo, l'URL è stato corretto
localhost: 6494 / Foo
Perché questo è un problema? demo di Phil utilizza il controller con il nome HomeController. Non so (perché non riesco a rintracciare) come il metodo Html.ActionLink () va in giro costruire l'URL; ma sembra come se si basa su un caso di default di HomeController esistente, che non ho.
Se qualcuno ha un suggerimento su come consentire controllori non nominati Home per essere il default, la preghiamo di rispondere. Grazie
Altri suggerimenti
Per non avere Home
come il nome del controller di default, semplicemente cambiare il percorso di default .
@ Joe
Nel vostro App_Start / file RouteConfig.cs dovete cambiare il valore per il controller di default da casa a quello che vuoi:
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "NAME_OF_YOUR_HOME_CONTROLLER", action = "Index", id = "" } // Parameter defaults
);