1

Celui-ci m'a lancé, alors j'ai pensé que je demanderais de l'aide. J'ai cela pour travailler avec mes routes "Catégories", mais pour une raison quelconque, quand j'essaye de faire la même chose avec "Consommateurs" ça ne marche pas du tout. Voici les informations de base nécessaires:Routage ASP.NET MVC 3 dans la zone/Admin avec nom au lieu de l'identifiant

routage (AdminAreaRegistration.cs):

public override void RegisterArea(AreaRegistrationContext context) 
    { 
     //matches /Admin/BusinessCategories/MyCategory/children 
     context.MapRoute(
      "ChildCategories", 
      "Admin/BusinessCategories/{category}/children", 
      new { controller = "BusinessCategories", action = "ViewChildren" } 
     ); 

     //matches /Admin/BusinessCategories/MyCategory/edit 
     context.MapRoute(
      "EditCategory", 
      "Admin/BusinessCategories/{category}/edit", 
      new { controller = "BusinessCategories", action = "Edit" } 
     ); 

     // want this to match /Admin/Consumers/JoeBob/details 
     context.MapRoute(
      "ConsumerDetails", 
      "Admin/Consumers/{alias}/details", 
      new { controller = "Consumers", action = "Details" } 
     ); 

     //matches /Admin 
     //matches /Admin/BusinessCategories 
     //matches /Admin/BusinessCategories/New 

     context.MapRoute(
      "Admin_default", 
      "Admin/{controller}/{action}/{id}", 
      new { controller = "AdminHome", action = "Index", id = UrlParameter.Optional }, 
      new { id = @"\d+" } 
     ); 
    } 

Ensuite, dans mon contrôleur Consommateurs (ConsumersController.cs):

public class ConsumersController : Controller 
{ 

    public ActionResult Index() 
    { 
     ...code... 
    } 

    [HttpGet] 
    public ActionResult Details(string alias) 
    { 
     return View(alias); 
    } 
} 

Je suis générer mon lien comme donc:

@Html.ActionLink(c.Alias, "Details", "Consumers", new { alias = c.Alias }, null) 

Le problème est que mon appel à @ Html.ActionLink génère un lien comme:

/Admin/Consumers/details?alias=JoeBob (qui se traduit par une 404, si vous cliquez sur) plutôt que ce que je veux, ce qui est:

/Admin/Consumers/JoeBob/details 

Une chose que j'ai remarqué est si je change alias = c.Alias à id = c.Alias, il produit une URL comme: /Admin/Consumers/details/JoeBob (donc il supprime la partie alias de la chaîne de requête, mais place toujours 'details' avant l'alias.)

Des idées?

Modifier: Le redémarrage d'IIS a résolu le problème pour moi. Je ne sais pas pourquoi, mais il l'a fait.

+0

Je ne sais pas ce qui cause spécifiquement cette question, mais je recommande fortement de jeter un oeil à la routedebugger pour voir si elle offre des conseils http://haacked.com/archive/2008/03/13/url-routing-debugger.aspx – lomaxx

+0

Oui, je connais cet utilitaire - et le lien, en fait, devrait être à la v2 - http://haacked.com/archive/2011/04/13/routedebugger-2.aspx – jamauss

Répondre

1

Vos itinéraires sont configurés correctement (je les ai testés). Je soupçonne que vous obtenez cette mauvaise conduite parce que la vue qui contient votre balisage @ Html.ActionLink() est en dehors de votre zone d'administration. Si c'est dans votre zone d'administration, vous devriez voir le lien approprié généré. Cependant, en dehors de votre zone d'administration, vous devez déclarer quelle zone vous ciblez comme ceci:

@Html.ActionLink(c.Alias, "Details", "Consumers", new { alias = c.Alias, area = "Admin" }, null) 
+0

En fait, l'appel @ Html.ActionLink ** est ** dans ma zone d'administration. Curieusement, je suis arrivé sur le serveur et j'ai redémarré IIS, et maintenant la structure d'URL correcte est générée, mais maintenant MVC tente de chercher une vue avec le nom du consommateur, plutôt que la vue "détails" - même si J'ai spécifié les noms Controller et Action dans mon itinéraire. : - \ – jamauss

+0

Nevermind - figuré cette partie. Je passais l'alias à la fonction View (j'avais laissé du code de test) donc c'était comme return View (alias). J'ai enlevé la partie "alias" donc c'était juste retourner View() et tout va bien. – jamauss

+0

C'est très étrange. J'ai testé votre code dans un tout nouveau projet MVC3 et cela fonctionne pour moi, donc je ne pense pas qu'il y ait un problème avec votre code. Bonne chance pour résoudre ça. –