2015-09-02 1 views
1

Dans notre architecture ASP.NET MVC, nous avons la structure de routage suivante:contrôleurs multiples spécifiés dans une voie

http://localhost:80/Students/Details/2 - will give me details about student with id == 2, details include all the classes current student have. 

http://localhost:80/Classes/Details/2 - will give me details about classes with id == 2, details include all the students current class have. 

http://localhost:80/Schedule/Details/class=2&student=2 - will give me details about specific schedule for student with id=2 that has class with id=2 

Cela fonctionne bien jusqu'à présent.

Maintenant, notre équipe est assez nouvelle sur asp.net mvc et nous avons pensé à rendre le routage un peu plus intuitif. Ainsi, au lieu de trois parcours séparés, nous aurons une longue route, quelque chose comme ceci:

http://localhost:80/Students/2/Classes/2/Homework/ 

et il fonctionnera comme:

http://localhost:80/Students/ - will give list of students 
http://localhost:80/Students/2 - will give details about student 2 
http://localhost:80/Students/2/Classes - will give all the classes for student with id 2 
http://localhost:80/Students/2/Classes/2 - will give schedule for class with id 2 and student with id 2. 

stoppez pas sûr si cela est/possible raisonnable, je voulais juste obtenir plus d'avis

Répondre

1

Les routes MVC sont mappées à une seule action dans une classe de contrôleur.
Vous pouvez configurer un itinéraire pour chaque cas, en mappant une action différente sur chacun d'eux. Rappelez-vous que les routes devraient être plus spécifiques ou plus génériques.

Dans votre App_Start/RouteConfig.cs:

 routes.MapRoute(
      name: "StudentSchedule", 
      url: "students/{studentID}/classes/{classID}", 
      defaults: new { controller = "Home", action = "StudentSchedule" } 
     ); 
     routes.MapRoute(
      name: "StudentClasses", 
      url: "students/{studentID}/classes", 
      defaults: new { controller = "Home", action = "StudentClasses" } 
     ); 
     routes.MapRoute(
      name: "StudentDetails", 
      url: "students/{studentID}", 
      defaults: new { controller = "Home", action = "StudentDetails" } 
     ); 
     routes.MapRoute(
      name: "StudentsList", 
      url: "students", 
      defaults: new { controller = "Home", action = "Students" } 
     ); 

Ainsi, vos actions ressemblera à ceci, vous devez ajouter le code pour obtenir des données de base de données, vous pouvez partager le code sur les classes sepparated/couches de votre application:

public ActionResult Students() 
    { 
     var viewmodel = new StudentsViewModel(); 
     ... 
     return View(viewmodel); 
    } 

    public ActionResult StudentDetails(int studentID) 
    { 
     var viewmodel = new StudentDetailsViewModel(); 
     ... 
     return View(viewmodel); 
    } 

    public ActionResult StudentClasses(int studentID) 
    { 
     var viewmodel = new StudentClassesViewModel(); 
     ... 
     return View(viewmodel); 
    } 

    public ActionResult StudentSchedule(int studentID, int classID) 
    { 
     var viewmodel = new StudentScheduleViewModel(); 
     ... 
     return View(viewmodel); 
    } 
+0

merci qui m'a donné une idée sur où aller! – inside

+0

super, heureux d'aider! – zed