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.
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
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