ASP zones MVC et ActionLink
-
22-08-2019 - |
Question
Je travaille sur un nouveau projet où je veux utiliser Phil Haack zones (1) + idée de tweak de Steve Sanderson (2). J'ai une vue simple racine avec un lien d'action à vue une zone (Foo). L'URL générée a la zone appropriée, mais il ajoute le contrôleur racine (bar) à la fin. Voici mon code de vue racine:
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
<h2>Index</h2>
<%= Html.ActionLink("Foo Index Page", "Index", new { area="Foo" } )%>
</asp:Content>
et est ici l'URL qu'il génère:
localhost: 6494 / Foo / Bar
Toute idée pourquoi le "/ Bar" est là-bas?
(1): haacked.com/archive/2008/ 11/04 / zones-en-aspnetmvc.aspx
(2): Blog .codeville.net / 2008/11/05 / app-zones-en-aspnet-mvc-take-2 /
La solution
Je l'ai trouvé une solution. Je ne pense pas qu'il soit approprié, je vais donc demander une amélioration. En spécifiant un nom de contrôleur, je peux obtenir l'URL pour former correctement. I.e..
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
<h2>Index</h2>
<%= Html.ActionLink("Foo Index Page", "Index", new { area="Foo", controller="Baz" } )%>
</asp:Content>
Une fois que je l'ai fait, l'URL est correcte
localhost: 6494 / Foo
Pourquoi est-ce un problème? La démo de Phil utilise le contrôleur avec le nom HomeController. Je ne sais pas (parce que je ne peux pas tracer) comment la méthode Html.ActionLink () va sur la construction de l'URL; mais il semble que si elle se fonde sur un cas par défaut de HomeController existant, que je n'ai pas.
Si quelqu'un a une suggestion sur la façon de permettre les contrôleurs ne sont pas nommées maison pour être la valeur par défaut, s'il vous plaît répondre. Merci
Autres conseils
Pour ne pas avoir Home
comme le nom du contrôleur par défaut, il suffit de changer la route par défaut .
@ Joe
Dans votre App_Start / fichier RouteConfig.cs vous devez changer la valeur par défaut pour le contrôleur de la maison à ce que vous voulez:
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "NAME_OF_YOUR_HOME_CONTROLLER", action = "Index", id = "" } // Parameter defaults
);