ASP.NET MVC路由根级别视图

时间:2009-06-29 06:51:00

标签: asp.net-mvc asp.net-mvc-routing

我认为这很容易,但我完全不知所措。

我希望一个控制器的视图位于应用程序的根级别,而不是在该控制器的子目录中,但我无法弄明白。

我想要这两个网址:

/ Info - 这应该在控制器“Home”上操作“Info”

/ Admin / - 这应该是控制器“Admin”

上的操作“索引”(默认)

到目前为止,无论我尝试过什么,第一条路线最终都会捕捉到它们。我似乎无法将两者分开。

那个Info页面甚至不需要控制器,它是静态的,但我确实想要使用母版页。可能有一种更简单的方法来解决这个问题,但我也没想出来。

我能想到的就是创建一个Info控制器,并将Views / Home / Info移动到Views / Info / Index,但它有一定的气味。

我可以使用以下方式在rails中执行此操作:

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

2 个答案:

答案 0 :(得分:6)

你只需要正确的路线。在你的情况下:

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

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

但我建议您采用this方法。

如果您需要更改视图/偏见视图的默认物理位置,请执行以下操作 查看how to创建自定义视图引擎。

答案 1 :(得分:0)

您可以使用路线属性。

在您的路线配置文件中,您应该有。

        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