2009-06-29 21 views
6

Pensé que esto sería bastante fácil, pero estoy totalmente desconcertado.ASP.NET MVC Nivel de raíz de enrutamiento Vistas

Quiero que las vistas de un controlador estén en el nivel raíz de la aplicación, en lugar de en un subdirectorio para ese controlador, pero no puedo resolverlo.

me gustaría tener estas dos direcciones:

/Info - esto debe de acción "Info" en el controlador "Inicio"

/Admin/- Esta debe ser la acción "Index" (por defecto) en el controlador "Administrador"

Hasta ahora, sin importar lo que he intentado, la primera ruta terminará atrapando a ambos. Parece que no puedo separar los dos.

Esa página de información no necesita un controlador, es estática, pero sí quiero usar una página maestra. Puede haber una forma mucho más fácil de lograr esto, pero tampoco me he dado cuenta.

Todo lo que puedo pensar que funcionaría sería crear un controlador de información y mover Vistas/Inicio/Información a Vistas/Información/Índice, pero eso tiene cierto olor.

que era capaz de hacer esto en los carriles usando:

map.connect ':controller/:action/:id' 
    map.connect ':action', :controller => 'home' 

Respuesta

6

Sólo tiene rutas adecuadas. En su caso:

routes.MapRoute(
       "Info", 
       "Info", 
       new { controller = "Home", action = "Info" } 

routes.MapRoute(
       "Admin", 
       "Admin", 
       new { controller = "Admin", action = "Index" } 

Pero te recomiendo this enfoque.

Si necesita cambiar la ubicación física predeterminada de views/partialviews,
echa un vistazo a how to crear motores de vista personalizada.

+0

¡No pensé en direccionarlos estáticamente, sino en colgar para encontrar el patrón! Todavía parece que debería haber una forma más dinámica, así que no tengo que agregar una nueva ruta para cada página. –

+0

Pensé lo mismo, pero ya no soy tan optimista. De todos modos, el enrutamiento a través de atributos parece una bala de plata para mí. :) –

+0

Casi como si hubiera una barra inclinada implícita, por lo que al final "/ Info" y "/ Admin /" terminan tocando la misma ruta porque "/ Info" se trata como "/ Info /". Y viceversa; si vuelvo a ordenar las rutas, la primera ruta aún atrapa ambas. En ese caso, es como tratar "/ Admin /" como "/ Admin". Estoy revisando el enrutamiento basado en atributos. Definitivamente parece prometedor. –

0

Puede utilizar los atributos de ruta.

En su archivo de configuración de ruta debe tener.

 routes.MapMvcAttributeRoutes(); 
     AreaRegistration.RegisterAllAreas(); 
     //code below should already be in your route config by default 
     routes.MapRoute(
      name: "Default", 
      url: "{controller}/{action}/{id}", 
      defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
     ); 

Luego de cada acción puede tener un atributo de ruta.

[Route("info")] 

Incluso, pueden obtener más avanzado con estos atributos mediante la adición de parámetros, y/o subcarpetas

[Route("blog/posts/{postId}")] 

Se puede poner el atributo anterior, en cualquier acción, y aparecerá como si se origina a partir el controlador del blog Sin embargo, ni siquiera necesitas un controlador de blog. También el {} significa el parámetro, así que asegúrese de que su acción tome el mismo parámetro que el que está en las llaves. En este caso, el parámetro sería

string postId 
Cuestiones relacionadas