控制器ASP.NET MVC中的子文件夹

时间:2015-11-19 11:18:20

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

在我的Controllers文件夹中,我想要一个名为Admin的子文件夹。

enter image description here

当我转到http://localhost:port/Admin/Login/时,它说无法找到该页面。

RouteConfig.cs

using System.Web.Mvc;
using System.Web.Routing;

namespace ICT4Events
{
    public class RouteConfig
    {
        public static void RegisterRoutes(RouteCollection routes)
        {
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

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

2 个答案:

答案 0 :(得分:5)

您可以使用下一个路线来处理您的问题:

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

请忘记将controller = "Home"的默认值更改为当用户键入http://localhost:port/Admin/时要重定向的控制器。

因此,当您转到http://localhost:port/Admin/Login/时,您将在Admin文件夹中使用Login控制器和Index操作。

重要 还要将此路由放在默认路由之前,因为如果将此代码放在"默认"之后路由ASP.NET将使用http://localhost:port/Admin/Login/控制器和Admin操作读取您的Login网址。

答案 1 :(得分:2)

您的新路线" SubFolder"不包括在路线中包含行动的可能性(在您的情况下," Admin")。

您的网址希望匹配

之类的路由
"SubFolder/ChildController/{action}"

如果不包含" {action}"在您的路线中,它不符合您的路线。然后它会尝试默认路由,这显然会失败。

尝试添加" {action}"到您的路线,如下例所示

routes.MapRoute(
"SubFolder", // Route name
"SubFolder/ChildController/{action}",
new { controller = "ChildController", action = "Index" },
new[] { "Homa.Areas.Kiosk.Controllers.SubFolder" });