ASP.NET MVC Controller SubFolder

时间:2017-01-17 17:30:42

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

我正在使用ASP.NET MVC并尝试创建一个控制器子文件夹。我查看了这个网站上的其他帖子并尝试了我在网上找到的内容,但它仍然遇到了这个问题:

HTTP 404. The resource you are looking for (or one of its dependencies) could have been removed, had its name changed, or is temporarily unavailable.  Please review the following URL and make sure that it is spelled correctly.

下面的屏幕截图是我在控制器文件夹中创建的子文件夹。

enter image description here

这是我的View文件夹的截图。

enter image description here

这是我在RouteConfig.cs文件中尝试的内容

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 }
    );

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

但我的子文件夹仍无法正常工作。我在这里做错了什么?

4 个答案:

答案 0 :(得分:4)

尝试以下事情...

首先按以下方式定义您的路由... 路由应该从最具体最不具体模式定义

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

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


        }

如果仍然无效,请尝试按照以下帖子中的说明添加控制器的程序集名称。Controller sub folder

另外,请告诉我们您要输入的网址到达该网页。

答案 1 :(得分:3)

根据MVC架构,视图从名为Controller文件夹内的控制器名称的子文件夹中呈现。我不认为在Views中嵌套文件夹会对你有用。相反,如果您想整理文件夹,可以选择“区域”。

答案 2 :(得分:0)

通常,当您将控制器(或任何类文件)直接添加到文件夹(或子文件夹)中时,Visual Studio将修改类文件中的命名空间以匹配该文件夹。因此,在您的情况下,而不是拥有&my; myprojectname.controller'您的类中的命名空间,它将具有' myprojectname.controller.admin'命名空间。

解决方案?好吧,我一直这样做,并在一堆文件夹中有控制器来组织我的代码。最简单的方法是将控制器添加到"控制器"文件夹第一。这样它将具有适当的命名空间。然后,只需将文件拖放到要组织它的文件夹中即可。因此,无论何时创建控制器,请确保在" Controller"中创建控制器。夹。我只需右键点击"控制器"文件夹并创建控制器。然后将文件拖到您想要的任何文件夹中。

答案 3 :(得分:0)

假设您正在使用MVC5,我肯定会考虑通过以下方式使用ASP.NET MVC的attribute-based routing功能:

1)在 /App_Start/RouteConfig.cs 文件中调用routes.MapMvcAttributeRoutes()方法:

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

        routes.MapMvcAttributeRoutes();

        // other routes.MapRoute() settings
    }
}

2)通过以下方式在“子文件夹”控制器中使用[Route]属性:

[Route("Admin/HomeAdmin/{action}")]
// URL: /Admin/HomeAdmin/YourActionName
public class HomeAdminController : GestioneController
{
    // TODO: Put your Action Methods here
    // They will respond to 
}

如果您需要其他信息,请查看我在此主题上写的this blog post