Pregunta

Pensé que esto sería bastante fácil, pero estoy totalmente desconcertado.

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 entenderlo.

Me gustaría tener estas dos URL:

/ Info - Esto debería actuar " Info " en el controlador " Inicio "

/ Admin / - Esto debería ser acción " Index " (predeterminado) en el controlador " Admin "

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

Esa página de información ni siquiera necesita un controlador, es estática, pero quiero usar una página maestra. Puede haber una manera mucho más fácil de lograr esto, pero tampoco lo he descubierto.

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 un cierto olor.

Pude hacer esto en rieles usando:

  map.connect ':controller/:action/:id'
  map.connect ':action', :controller => 'home'
¿Fue útil?

Solución

Solo necesitas las 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 este enfoque.

Si necesita cambiar la ubicación física predeterminada de las vistas / vistas parciales,
vea cómo crear motores de vista personalizados.

Otros consejos

Puede usar los atributos de ruta.

En su archivo de configuración de ruta debería 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, sobre cada acción, puede tener un atributo de ruta.

 [Route("info")]

Incluso puede ser más avanzado con estos atributos agregando parámetros y / o subcarpetas

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

Puede colocar el atributo anterior en cualquier acción, y aparecerá como si se originara en el controlador del blog. Sin embargo, ni siquiera necesita un controlador de blog. También {} significa el parámetro, así que solo asegúrese de que su acción esté tomando el mismo parámetro que lo que está entre llaves. En este caso, el parámetro sería

string postId
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top