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

Subfolder in Controllers ASP.NET MVC

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

当我转到 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 }
            );
        }
    }
}

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

你的url想匹配routie like

"SubFolder/ChildController/{action}"

如果您的路线中不包含“{action}”,它将不会匹配您的路线。然后它尝试默认路由,这显然失败了。

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

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

您可以使用下一条途径来处理您的问题:

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 操作。

重要 还要把这条路线放在默认路线之前,因为如果你把这段代码放在你的 "Default" 路线之后 ASP.NET 会读取你的 http://localhost:port/Admin/Login/ 就像 URL 和 Admin 控制器和 Login行动。