2012-05-28 24 views
5


Estoy creando un proyecto en MVC3 junto con C# para una universidad local. El requisito era mostrar el perfil del profesor cuando se ingresaba algo como www.mysite.com/teachercode en el navegador.¿Es posible agregar ruta en tiempo de ejecución en MVC3?

He hecho un método ShowTeacher en mi clase de controlador de profesor. Mi plan es buscar la base de datos al inicio de la aplicación y para cada maestro registrar la misma ruta que se muestra a continuación, que manejará la solicitud más a fondo, ¿es correcto este enfoque?

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

En segundo lugar, si se añade un nuevo maestro en la base de datos, es posible añadir la ruta tan pronto como el maestro se guarda?

Gracias de antemano

Respuesta

5

que no es necesario añadir una ruta en tiempo de ejecución, en lugar usted puede crear una ruta que captura las direcciones URL de la forma www.mysite.com/teachercode, siempre y cuando ninguno de sus maestros códigos tienen el mismo nombre que cualquiera de sus controladores.

En RegisterRoutes, añadir otra ruta (que tiene que ser la primera uno), lo que hará consultas ruta que lleva al método ShowTeacher acción de su TeacherController, junto con una route constraint.

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

La restricción en este ejemplo - @"[A-Za-z]{1,10}" - se speciying que el teachercode contendrá sólo las letras mayúsculas o minúsculas, y es entre 1 y 10 caracteres de longitud. Puedes adaptar esto a tus necesidades.

+0

¿Qué pasará si el usuario ingresa a www.misitio.com en el navegador, en ese caso el usuario será llevado a la ruta del Profesor, ¿no es así? Pero quiero que el usuario vaya al controlador doméstico en este caso. También quiero saber esto para mi conocimiento también. –

+1

@ImranBalouch Si el usuario ingresa a _www.misitio.com, entonces esta ruta no se utilizará, porque usa una restricción de ruta que requiere al menos un carácter en la ruta de la URL. –

+0

wow, hombre impresionante! ayer esta cosa tomó un buen tiempo mío, yo estaba usando el mismo enfoque, pero sin restricciones, lolz Gracias por la respuesta, amigo, recibí respuesta a mi pregunta, pero para mi conocimiento, ¿podría decirme si es posible? para agregar ruta en tiempo de ejecución? –

Cuestiones relacionadas