2017-04-24 1 views
0

Sur mon contrôleur domestique, toutes les actions sauf une n'ont pas de paramètre ID, pour toutes les actions sans paramètre ID, je voudrais que l'action apparaisse dans l'URL, mais pas le contrôleur. Pour une action que je voudrais ni le contrôleur ou l'action à afficher dans l'URL, seul le paramètre d'identification pour cette action, par exemple:Routage MVC sans action visible dans l'URL pour 1 action mais l'identifiant n'apparaissant que dans l'URL pour une autre action sur le même contrôleur?

routes.MapRoute(
      "OnlyCourse", 
      "{courseabbrev}", 
      defaults: new { controller = "Home", action = "course", courseabbrev = UrlParameter.Optional } 
     ); 

routes.MapRoute(
       "OnlyAction", 
       "{action}", 
       defaults: new { controller = "Home", action = "Index"} 
      ); 

routes.MapRoute(
       name: "Default", 
       url: "{controller}/{action}/{courseabbrev}", 
       defaults: new { controller = "Home", action = "Index", courseabbrev = UrlParameter.Optional } 
      ); 

Cependant, si je mets la route OnlyCourse d'abord les voies d'action de l'indice par le biais et si J'ai mis la route OnlyAction d'abord la route OnlyCourse n'est pas trouvée. Comment puis-je obtenir ces itinéraires pour répondre à des actions spécifiques indépendamment?

modifier -

Ainsi, par exemple l'URL uniquement Cours (action bien sûr) serait:

http://www.sitename.come/courseabbrev

et l'URL pour les autres actions serait

http://www.sitename.com/action

J'ai déjà essayé ce qui suit:

routes.MapRoute(
      "OnlyCourse", 
      "{courseabbrev}", 
      defaults: new { controller = "Home", action = "course"}, 
      constraints: new { action = "course" } 

     ); 

     routes.MapRoute(
      "OnlyAction", 
      "{action}", 
      defaults: new { controller = "Home" } 
     ); 

Et cela fait l'affaire pour l'action d'index, cependant toute autre action utilise toujours la route OnlyCourse. J'ai essayé d'ajouter une contrainte mais cela ne semble pas faire grand-chose car cette route considérera toutes les actions en dehors de l'index.

+0

pouvez-vous ajouter l'URL à la fois OnlyCourse et OnlyAction à partir de laquelle vous essayez de accès – Usman

+0

Bonjour, J'ai ajouté l'URL en question plus quelques autres résultats. À votre santé. – Rob

+0

vous n'avez pas besoin d'action seule la route par défaut gérera pour vous même s'il n'y a pas d'ID – Usman

Répondre

0

il ne fonctionnera pas parce que modèle des deux routes "{courseabbrev}" et "{action}" sont des moyens aussi bien si vous utilisez "{courseabbrev}" il ignorera "{action}" donc vous devez faire un d'entre eux pour être plus précis comme celui-ci

routes.MapRoute(
    "OnlyCourse", 
    "courseabbrev/{courseabbrev}", 
    defaults: new { controller = "Home", action = "course"} 

); 

routes.MapRoute(
    "OnlyAction", 
    "{action}", 
    defaults: new { controller = "Home", action = "Index" } 
); 

de sorte que votre URL sera

http://www.sitename.come/courseabbrev/yourcourseabbrev

http://www.sitename.com/action

si vous voulez route à /courseabbrev puis

routes.MapRoute(
    "OnlyCourse", 
    "{courseabbrev}", 
    defaults: new { controller = "Home", action = "course" } 
    ); 

routes.MapRoute(
    name: "Default", 
    url: "{controller}/{action}/{id}", 
    defaults: new {controller = "Home", action = "Index", id = UrlParameter.Optional} 
    ); 

maintenant votre URL sera

http://www.sitename.come/courseabbrev

http://www.sitename.com/controller/action

+0

Bonjour, merci pour votre réponse, oui je suis conscient que je peux me différencier en utilisant un autre nom d'action mais cela ne résout pas mon problème. Tout le point de ma question est que je voudrais que l'URL soit seulement 'courseabbrev' pour l'action OnlyCourse sans rien avant. Malheureusement, votre solution ne résout pas le problème. S'il n'est tout simplement pas possible d'utiliser ce type de routage, je me pencherai peut-être sur le routage des attributs. – Rob

+0

@Rob alors vous n'avez pas besoin d'action seulement route laissez-moi modifier ma réponse – Usman

+0

Bonjour Usman, désolé peut-être que je n'ai pas été clair, j'ai besoin d'URL selon ma question initiale. Donc, pour toutes les actions, bien sûr, l'URL serait sitename.com/action et, bien sûr, ce serait sitename.com/courseabbrev. J'ai donc besoin d'un routage spécifique pour toutes les actions sauf bien sûr et pour le cours lui-même. Je l'ai fait en utilisant le marquage d'attribut mais s'il y a un moyen de le faire en utilisant ce routage traditionnel qui serait utile aussi. À votre santé – Rob