2012-04-07 3 views
3

Je rencontre un problème avec html.actionlink. J'ai deux itinéraires définis:asp.net mvc actionlink utilisant une mauvaise route

routes.MapRoute(
       "AdminDefault", 
       "Admin/{controller}/{action}/{id}", 
       new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
      ); 
routes.MapRoute(
       "Default", 
       "{controller}/{action}/{id}", 
       new { controller = "Page", action = "Details", id = "0" } 
      ); 

le ActionLink utilise la bonne AdminDefault, quand je veux utiliser le contrôleur par défaut. Comment l'obtenir pour utiliser l'itinéraire par défaut sans utiliser un routage?

Pour ajouter plus d'informations. J'ai une action simple (home/index), il montre une vue (Index.cshtml), en ce point de vue je:

@Html.ActionLink("About", "About", "Home") 

qui génère une URL de "/ admin/Home/A propos de" quand je veux il est "/ Home/About" la route defaultadmin est pour que je puisse créer des liens plus tard qui vont à/admin/controller/action pour toutes les pages d'administration, mais je veux que les URL générées par défaut ne soient pas sous admin.

Répondre

2

Si vous utilisez Html.ActionLink à partir d'une vue située dans une zone, elle transmettra par défaut la zone à ce lien.

Pour remplacer cela, vous pouvez appeler Html.ActionLink comme ceci:

@Html.ActionLink("linkText", "actionName", "controllerName", new {Area = "AreaName"}, null); 

où 'nouvelle {zone = "AreaName"}' sont l'objet de la route des valeurs et 'null' sont les attributs HTML. Vous pouvez donc utiliser 'new {Area = ""}'

+0

Je n'utilise pas de zones – Solmead

+0

Ah, j'ai mal compris. Dans ce cas, vous devrez soit échanger vos règles existantes, puis créer manuellement les routes pour les pages d'administration. Ou vous pouvez ajouter une zone d'administration. –