RouteConfig.cs不能像Subfolder一样工作

时间:2016-02-19 22:04:02

标签: asp.net-mvc

我创建了一个Admin子文件夹,用于包含所有与管理员相关的控制器。与此类似:Subfolder in Controllers ASP.NET MVC

以下是我在RouteConfig.cs"

中的代码
        routes.MapRoute(
            name: "Admin",
            url: "admin/{controller}/{action}/{id}",
            defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional },
        );

        routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional },
        );

我在ManageUserController文件夹下有一个Admin,而Admin位于Controllers文件夹下。

我在PublicContollers

下直接Controllers

以下是我的问题:

  1. 我的所有Html.ActionLinkReturn View()以及任何其他类似的Redicrecting都感到困惑。例如,Html.ActionLink("Public", "Index", "Public")会将我带到www.something.com/admin/public/index,而不仅仅是www.something.com/public/index

  2. 似乎admin关键字在路由中没有任何用处。例如,www.something.com/admin/manageUser/indexwww.something.com/manageUser/index都会将我带到同一个地方。

  3. 预期产出:

    1. 如果我有Html.ActionLink("Public", "Index", "Public"),则应该转到www.something.com/public/index,类似地,如果我有Html.ActionLink("Manage Users", "Index", "ManageUser"),则应该转到www.something.com/admin/ManageUser/index

    2. 如果我输入www.something.com/ManageUser/Index,则应该向我发送页面未找到错误。

    3. 我错过了什么?

1 个答案:

答案 0 :(得分:0)

MVC不正式支持子文件夹。链接问题的答案显示了如何模仿一个子文件夹。如果您想创建嵌套的子文件夹,则需要为每个子文件夹创建一个新路由,并且每个级别只能支持一个控制器。

如果你真的希望你的MVC应用程序表现得像它有子文件夹,我建议使用MvcCodeRouting,它通过控制器所在的命名空间动态配置MVC路由(如果使用Visual Studio,将是相同的层次结构作为子文件夹),并将支持每个文件夹中的多个控制器。