2015-09-02 3 views
1

В нашей архитектуре ASP.NET MVC мы имеем следующую структуру маршрутизации:несколько контроллеров, указанных в одном маршруте

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 

Это прекрасно работает до сих пор.

Теперь наша команда довольно новичок в asp.net mvc, и мы думали о том, чтобы сделать маршрутизацию более интуитивно понятной. Так что вместо трех отдельных маршрута мы будем иметь один длинный маршрут, что-то вроде этого:

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

и он будет работать как:

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. 

Не бросить курить уверен, что это разумно/возможно, просто хотел получить больше отзывов

ответ

1

MVC Маршруты отображаются в одно действие внутри класса контроллера.
Вы можете настроить маршрут для каждого случая, сопоставляя его с другим действием. Помните, что маршруты должны быть размещены от более конкретных до более общих.

В ваших 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" } 
     ); 

Итак, ваши действия будут выглядеть следующим образом, вы должны добавить код, чтобы получить данные из базы данных, можно разделить код на sepparated классов/слоев вашего приложения:

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

спасибо, что дало мне представление о том, куда идти! – inside

+0

отлично, рад помочь! – zed