2009-08-14 7 views
0

J'ai des problèmes avec Html.ActionLink lorsque j'ai un itinéraire qui prend un paramètre. Je les routeurs suivants global.asx:Problèmes avec une route personnalisée dans ASP.NET-MVC

 routes.MapRoute(
      "Default",            // Route name 
      "{controller}/{action}/{id}",       // URL with parameters 
      new { controller = "Home", action = "Index", id = "" } // Parameter defaults 
     ); 
     routes.MapRoute(
      "materias", 
      "{controller}/{action}/{id},{titulo_materia}.html", 
      new { controller = "materias", action = "Index", id = "", titulo_materia = "" } 
     ); 

Lorsque j'utilise ActionLink passer deux paramètres, tout fonctionne bien. Mais lorsque je tente de créer un lien en utilisant la première route je me retrouve avec quelque chose comme:

http://meusite.com/controller-name/[parameter],.html

EDIT:

Voici le lien d'action I`M ayant des problèmes:

<span class="editar"><%=Html.ActionLink("Editar", "Edit", "Users", new { id = this.Model.login }, null)%></span> 

Ce lien se trouve sur une autre page qui est utilisée pour gérer les données utilisateur.

+0

Postez votre code Html.ActionLink –

+0

i édité mon post avec le code ActionLink. – Cleiton

+0

Que se passe-t-il si vous déplacez la deuxième règle d'itinéraire avant la première? –

Répondre

1

D'abord, vous devriez mettre votre route la plus générique au fond.

Alors, que diriez-vous de faire quelque chose comme:

routes.MapRoute(
     "materias", 
     "{materias}/{action}/{id},{titulo_materia}.html", 
     new { controller = "materias", action = "Index", id = "", titulo_materia = "" } 
    ); 

    routes.MapRoute(
     "Default",            // Route name 
     "{controller}/{action}/{id}",       // URL with parameters 
     new { controller = "Home", action = "Index", id = "" } // Parameter defaults 
    ); 

De cette façon, la route matérias ne fonctionne que pour le contrôleur de matérias. (Non testé)

EDIT: htmm .. essayez d'utiliser l'exemple de martin avec un petit plus:

Html.RouteLink("Link Title", new { controller = "Controller", Action= "Action",id = this.Model.login }); 
+0

Je l'ai testé ... Mais j'obtiens le même résultat. Quand j'essaye de créer un lien using actionlink avec deux paramtres j'obtiens quelque chose comme "http://meusite.com/controllerName/[first-paramters]?titulo_materia=foobar – Cleiton

+0

ouais! Je l'ai fait et cela a fonctionné très bien! Merci! – Cleiton

0

Utilisation:

Html.RouteLink("Link Title", new { controller = "Controller", Action= "Action" }); 
+0

@Martin, mais je dois passer l'ID de l'utilisateur pour obtenir des informations sur l'utilisateur. – Cleiton

Questions connexes