0

J'essaie de configurer mon itinéraire afin qu'il reflète l'onglet sur lequel l'utilisateur se trouve dans la page. Photos ci-dessous. Si l'état est « à venir » Je veux avoir juste un itinéraire avec l'état = à venir comme celui-ci sans mois ou annéeConfiguration de mon itinéraire dans Asp.Net MVC

www.mysite.com/Schedule/Host/Upcoming

si l'état est « passé » J'ai besoin d'exiger d'un mois et l'année comme celui-ci

www.mysite.com/Schedule/Host/Past/March/2016

Le problème est que je peux entrer dans tout le contrôleur et l'action

Horaire/Hôte

et la route passe à travers la méthode d'action. Je veux empêcher cela.

voici quelques exemples

www.mysite.com/Schedule/Host -> pas de passe avec juste le contrôleur et l'action

www.mysite.com/Schedule/Host/Upcoming -> d'accord avec aucun mois ou année

www.mysite.com/Horaire/Hôte/Past/Mars/2016 -> lorsque l'état = passé, vous devez fournir un mois et l'année

Voici ce que la page ressemblera à venir comme l'état

https://localhost:44368/Schedule/Host/Upcoming

enter image description here

Voici ce qu'il ressemblera avec le passé que l'état

https://localhost:44368/Schedule/Host/Past/March/2017

enter image description here

Voici mon routage

public static void RegisterRoutes(RouteCollection routes) 
    { 
     routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

     routes.MapRoute(
      name: "ScheduleByState", 
      url: "{controller}/{action}/{state}/{month}/{year}", 
      defaults: new { month = UrlParameter.Optional, year = UrlParameter.Optional} 
     ); 

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


    } 

Voici ma méthode l'action Hôte

public ActionResult Host(string state, string month, string year) 
{ 
    ViewBag.MenuItem = "schedule"; 
    ViewBag.UserMenuItem = "host"; 
    return View(); 
} 
+0

chaîne est un type nullable. Vous devez gérer la vérification de la valeur du paramètre au niveau de la méthode d'action. Aussi, vous pouvez envisager d'utiliser les types appropriés (int pour le mois et l'année) – Shyju

Répondre

0

ne sais pas si je comprends bien votre question

mais vous semble devez définir plusieurs routes pour satisfaire vos besoins

routes.MapRoute(
      name: "home", 
      url: "{controller}/{action}/" 
      } 
     );  

routes.MapRoute(
      name: "ScheduleByState", 
      url: "{controller}/{action}/Upcoming/" 
      } 
     ); 


routes.MapRoute(
      name: "ScheduleByState", 
      url: "{controller}/{action}/Past/{month}/{year}" 
      } 
     ); 

Une autre solution est l'utilisation regex dans votre paramètre de routeur, il va rendre les choses plus compliquées, donc si vous avez seulement ces états fixes, probablement plus de règles seront plus faciles à manipuler