ASP.NET Представления корневого уровня маршрутизации MVC

StackOverflow https://stackoverflow.com/questions/1056889

  •  20-08-2019
  •  | 
  •  

Вопрос

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

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

Я бы хотел иметь эти два URL-адреса:

/Info - Это должно привести к действию "Info" на контроллере "Home"

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

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

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

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

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

  map.connect ':controller/:action/:id'
  map.connect ':action', :controller => 'home'
Это было полезно?

Решение

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

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

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

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

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

Другие советы

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

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

        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.

 [Route("info")]

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

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

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

string postId
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top