2010-02-04 6 views
1

J'ai une vue qui édite et crée des "groupes d'utilisateurs". Et j'ai un "groupe d'utilisateurs-detailsview" (Admin/Usergroup/43) où j'ai 2 liens:RoutesLink à la même action

Html.RouteLink("Edit", "UsergroupEdit", 
    new { usergroupID = Model.Usergroup.UsergroupID }) 

Html.RouteLink("Create", "UsergroupCreate") 

Dans mon global.asax je suis arrivé:

routes.MapRoute("UsergroupEdit", "Admin/Usergroup/Edit/{usergroupID}", 
    new { controller = "UsergroupsAdmin", action = "Edit" }); 

routes.MapRoute("UsergroupCreate", "Admin/Usergroup/Edit", 
    new { controller = "UsergroupsAdmin", action = "Edit" }); 

Le premier où l'int est passé en rend:

Administrateur/groupe d'utilisateurs/Modifier/87

Mais le second rend comme:

Admin? Length = 24

Comment réparer cette route?

/M

Répondre

3

Pour rester sain d'esprit;) et de garder les choses claires utiliser deux voies:

routes.MapRoute(
    "UsergroupEdit", 
    "Admin/Usergroup/Edit/{usergroupID}", 
    new 
    { 
     controller = "UsergroupsAdmin", 
     action = "Edit" 
    }); 

routes.MapRoute(
    "UsergroupCreate", 
    "Admin/Usergroup/Create", 
    new 
    { 
     controller = "UsergroupsAdmin", 
     action = "Create" 
    }); 

également à partir du code, je vois que vous avez un nom de contrôleur UsergroupsAdmin..If ​​vous avez quelque part là aussi un contrôleur Usergroups, vous feriez mieux de se débarrasser de UsergroupsAdmin et juste décorer les actions "admin" dans le contrôleur Usergroups avec [Autoriser filtre d'action. Pour autoriser, vous pouvez implémenter votre propre fournisseur de rôle afin de pouvoir y vérifier vos besoins. Cela gardera les choses très propres et maintenables.

Si vous décidez de garder Modifier l'itinéraire, assurez-vous d'avoir un seul comme ceci:

routes.MapRoute(
    "UsergroupEdit", 
    "Admin/Usergroup/Edit/{usergroupID}", 
    new 
    { 
     controller = "UsergroupsAdmin", 
     action = Edit", 
     usergroupID = 0 
    }); 

et vérifier dans l'action du contrôleur où usergroupID = 0, render créer vue.

1

Ce que vous avez devrait fonctionner très bien. Peut-être que vous avez une faute de frappe quelque part?

Je viens d'essayer cela en mettant ces deux appels en mon point de vue de Index.aspx dans le HomeController et je me suis la sortie suivante:

<a href="/Admin/Usergroup/Edit/123">Edit</a> 
<a href="/Admin/Usergroup/Edit">Create</a> 

Voici ma méthode était RegisterRoutes. Il est fort probable que vous rencontriez un problème avec une autre route définie avant ces routes.

+0

pourquoi êtes-vous descendu? Phil Haack est un chef de produit travaillant sur ASP.NET MVC. Sérieusement, il pourrait savoir quelque chose ... –

+0

Quand je change d'ordre, il rend ...../Admin/Edit, puis/Admin/Edit? UsergroupID = 78 ... Je suppose que cela devra faire pour l'instant. Ou y a-t-il un autre moyen de régler cela? –

+0

@molgan, Comme l'a dit Phil Haack, le problème se produit probablement à cause d'une autre route définie avant les routes. –

0

A quoi ressemble votre méthode de contrôleur "Edit" (la signature de la méthode)?

Utilisez-vous l'int? type de données (int nullable)?

J'ai l'habitude d'obtenir l'ensemble? Longueur = 24 chose quand j'essaye de mapper à une action et ai dérangé les paramètres en quelque sorte.

Vous devriez également envisager d'essayer la recommandation de @ Haacked de réorganiser les routes dans votre code global. Je ne sais pas qui est en train de voter le gars, mais il sait beaucoup de choses sur ASP.NET MVC.

0

L'ordre modifié, bien qu'il ne l'ait pas complètement réparé, l'a simplement fait fonctionner

Questions connexes