Виды корневого уровня маршрутизации ASP.NET MVC - PullRequest
6 голосов
/ 29 июня 2009

Я думал, что это будет довольно легко, но я совершенно сбит с толку.

Я хочу, чтобы представления одного контроллера находились на корневом уровне приложения, а не в подкаталоге этого контроллера, но я не могу понять это.

Я хотел бы получить эти два URL:

/ Info - это действие "Info" на контроллере "Home"

/ Admin / - Это должно быть действие «Индекс» (по умолчанию) на контроллере «Администратор»

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

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

Все, что я могу придумать, - это создать контроллер Info и переместить Views / Home / Info в Views / Info / Index, но это имеет определенный запах

Я смог сделать это в рельсах, используя:

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

Ответы [ 2 ]

6 голосов
/ 29 июня 2009

Вам просто нужны правильные маршруты. В вашем случае:

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

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

Но я рекомендую вам этот подход.

Если вам нужно изменить физическое расположение видов / частичных видов по умолчанию,
Изучите , как создать пользовательские механизмы просмотра.

0 голосов
/ 25 января 2016

Вы можете использовать атрибуты маршрута.

В вашем файле конфигурации маршрута вы должны иметь.

        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 }
        );

Тогда над каждым действием вы можете иметь атрибут маршрута.

 [Route("info")]

Вы даже можете получить больше опыта с этими атрибутами, добавив параметры и / или подпапки

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

Вы можете поместить вышеуказанный атрибут в любое действие, и оно будет выглядеть так, как будто оно исходит от контроллера блога. Тем не менее, вам даже не нужен контроллер блога. Также {} обозначает параметр, поэтому просто убедитесь, что ваше действие принимает тот же параметр, что и в фигурных скобках. В этом случае параметр будет

string postId
...