2009-05-19 5 views
13

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 root con un link di azione per visualizzare un'area (Foo). L'URL generato ha l'area appropriata, ma aggiunge il root controller (Barra) alla fine. Ecco il mio radice codice della vista:ASP MVC Aree e ActionLink

<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/areas-in-aspnetmvc.aspx

(2): blog.codeville.net/2008/11/05/app-areas-in-aspnet-mvc-take-2/

risposta

20

ho trovato una soluzione. Non penso sia appropriato, quindi chiederò un miglioramento. Specificando il nome di un controller, posso ottenere che l'URL si formi correttamente. OSSIA

<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? La demo di Phil utilizza il controller con il nome HomeController. Non so (perché non posso tracciare) come il metodo Html.ActionLink() decida di costruire l'URL; ma sembra che si basi su un caso predefinito 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

0

@ 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 
     );