2017-01-13 1 views
0

Je génère une URL pour une liste, et quand l'identifiant correspond à une certaine chaîne, je voudrais appeler une autre route que l'article par défaut que j'ai réussi à faire. J'ai trois routes, toutes fonctionnelles.Routage ASP.NET MVC: 2 route pour la même page, comment donner la même URL rendue?

routes.MapRoute(
      name:="ArticleToPage", 
      url:="article-MySecondPage", 
      defaults:=New With {.Controller = "MySecondPage", .Action = "MySecondPage"} 
     ) 
    routes.MapRoute(
     name:="MySecondPage", 
     url:="MySecondPage", 
     defaults:=New With {.controller = "MySecondPage", .action = "MySecondPage"} 
    ) 

routes.MapRoute(
       name:="Article", 
       url:="article-{id}", 
       defaults:=New With {.Controller = "Page", .Action = "Article", .id = UrlParameter.Optional} 
      ) 

Cela fonctionne très bien, me redirigeant exactement où je veux.

Mais existe-t-il un moyen d'appeler la route "MySecondPage" au lieu de "AticleToPage", afin d'avoir la bonne url? J'ai essayé de spécifier le chemin de l'action et plusieurs choses mais je ne suis nulle part .. Connaissez-vous un moyen ??

EDIT

Je ne pourrais pas avoir été clair là-haut

j'ai 2 url lié à ces routes me envoyer à la même page:

Site/MySecondPage 
Site/Article-MySecondPage 

Quand je l'appelle « Site/Article-MySecondPage "id aiment vraiment rediriger vers ma route" MySecondPage ", ou convertir l'URL dans l'appel de route (mais je ne pense pas que ce soit possible) à" Site/MySecondPage "

Répondre

0

deux de vos URL:

Site/MySecondPage 
Site/Article-MySecondPage 

devrait fonctionner. Autrement dit, lorsque vous appelez chacune de ces URL, votre application doit exécuter l'action MySecondPage dans un contrôleur nommé MySecondPageController.

Si ce que vous voulez est de générer une URL avec la seconde URL, vous devez utiliser @Html.RouteLink plutôt que @Html.ActionLink si vous pouvez passer le nom de la route pour correspondre.

@Html.RouteLink(
    linkText:= "My Second Page 1", 
    routeName:= "ArticleToPage", 
    routeValues:= New With {.Controller = "MySecondPage", .Action = "MySecondPage"}) 
@Html.RouteLink(
    linkText:= "My Second Page 2", 
    routeName:= "MySecondPage", 
    routeValues:= New With {.Controller = "MySecondPage", .Action = "MySecondPage"}) 
0

Les routes seront appelées dans l'ordre où elles sont, ainsi "ArticleToPage" sera toujours appelé avant "MySecondPage".

+0

j'ai essayé déjà, mais il doesn fonctionne pas depuis l'URL que je veux changer correspondre à la « ArticleToPage » – KryunoKijy

+0

mais dans les deux itinéraires que vous appelez le même contrôleur et l'action, sans aucun changement, ou un attribut supplémentaire –

+0

aussi l'URL doit être comme l'URL que vous voulez. exemple 'routes.MapRoute ( name: =" Article ", url: =" {controller}/{action} - {id} ", defaults: = Nouveau {Controller =" Page ", Action =" Article " , id = UrlParameter.Optional} ); –