2012-05-28 4 views
5


Я создаю проект в MVC3 вместе с C# для местного колледжа. Требовалось показать профиль преподавателя, когда в браузере вводится что-то вроде www.mysite.com/teachercode.Можно ли добавить маршрут во время выполнения в MVC3?

Я разработал метод ShowTeacher в классе моего учителя. Мой план заключается в поиске базы данных при запуске приложения и для каждого учителя регистрирует тот же маршрут, что и ниже, который будет обрабатывать запрос дальше, правильно ли этот подход?

foreach(Teacher tch in TeacherCollection) 
routes.MapRoute(
      "Teacher route" + tch.Id, 
      tch.TeacherCode, 
      new { controller = "Teacher", action = "ShowTeacher" } 
     ); 

Во-вторых, если новый учитель добавляется в базу данных, можно добавить маршрут, как только учитель спасен?

Заранее спасибо

ответ

5

Вам не нужно, чтобы добавить маршрут во время выполнения, вместо этого вы можете создать маршрут, который будет ловить URL-адреса вида www.mysite.com/teachercode, до тех пор, ни один из ваших кодексов имеет то же имя, что и любой из ваших контроллеров.

В RegisterRoutes, добавьте еще один маршрут (который должен быть первый один), который будет направлять запросы к методу ShowTeacher действия вашего TeacherController, наряду с route constraint.

routes.MapRoute(
    "Teacher route", // route name 
    "{teacherCode}", // url 
    new { controller = "Teacher", action = "ShowTeacher" }, // defaults 
    new { teacherCode = @"[A-Za-z]{1,10}" } // constraints 
    ); 

Ограничение в данном примере - @"[A-Za-z]{1,10}" - это speciying, что teachercode будет содержать только верхние или строчные буквы, и длиной от 1 до 10 символов. Вы можете адаптировать это к вашим потребностям.

+0

Что произойдет, если пользователь зайдет на сайт www.mysite.com в браузере, в этом случае пользователь будет отправлен на маршрут Учителя, не так ли? Но я хочу, чтобы в этом случае пользователь пошел на домашний контроллер. Также я хочу знать эту вещь и для своих знаний. –

+1

@ImranBalouch Если пользователь вводит _www.mysite.com_, то этот маршрут не будет использоваться, потому что он использует ограничение маршрута, которое требует по крайней мере одного символа на пути к URL. –

+0

ничего себе, потрясающий мужчина! вчера эта штука заняла достаточно хорошее время, я использовал такой же подход, но с ограничениями, lolz Спасибо за ответ, мой друг, я получил ответ на свой вопрос, но, насколько мне известно, вы можете сказать мне, если это возможно добавить маршрут во время выполнения? –

Смежные вопросы