Asp.net mvc .NETMVC4没有';无法正确定位视图文件夹

Asp.net mvc .NETMVC4没有';无法正确定位视图文件夹,asp.net-mvc,Asp.net Mvc,我有一个MVC4站点,在“视图”文件夹下,我有一个用于各种视图的文件夹。其中之一是名称“服务”。在控制器下,我有服务控制器。一切都很顺利。然后,我在站点的根目录中创建了一个名为“Services”的文件夹。现在,当布线使用该文件夹查找视图时,而不是在“视图”文件夹中查找下方????有谁能让我了解这个现象吗?我只是简单地重新命名了第二个文件夹,life is good再次出现,但这出乎意料,因为我认为路由在默认情况下转到了views文件夹。您不应该在根目录下有Services文件夹。这会告诉路由忽

我有一个MVC4站点,在“视图”文件夹下,我有一个用于各种视图的文件夹。其中之一是名称“服务”。在控制器下,我有服务控制器。一切都很顺利。然后,我在站点的根目录中创建了一个名为“Services”的文件夹。现在,当布线使用该文件夹查找视图时,而不是在“视图”文件夹中查找下方????有谁能让我了解这个现象吗?我只是简单地重新命名了第二个文件夹,life is good再次出现,但这出乎意料,因为我认为路由在默认情况下转到了views文件夹。

您不应该在根目录下有
Services
文件夹。这会告诉路由忽略而不调用ASP.NET MVC


您应该有一个
Views/Services
文件夹。

很可能您的路由类似于/Services/MethodName,而您的视图文件夹也类似于/Services/MethodName.ascx或磁盘上的任何内容。。。如果您不告诉MVC路由现有文件,那么默认情况下,MVC会让它们从磁盘上获得服务。要覆盖此设置,请在应用程序启动时在Global.asax.cs中设置=true

这是用于从MVC3中的默认视图引擎查找视图的反汇编代码:

剃刀:

public RazorViewEngine(IViewPageActivator viewPageActivator) : base(viewPageActivator)
{
    base.AreaViewLocationFormats = new string[]
    {
        "~/Areas/{2}/Views/{1}/{0}.cshtml",
        "~/Areas/{2}/Views/{1}/{0}.vbhtml",
        "~/Areas/{2}/Views/Shared/{0}.cshtml",
        "~/Areas/{2}/Views/Shared/{0}.vbhtml"
    };
    base.AreaMasterLocationFormats = new string[]
    {
        "~/Areas/{2}/Views/{1}/{0}.cshtml",
        "~/Areas/{2}/Views/{1}/{0}.vbhtml",
        "~/Areas/{2}/Views/Shared/{0}.cshtml",
        "~/Areas/{2}/Views/Shared/{0}.vbhtml"
    };
    base.AreaPartialViewLocationFormats = new string[]
    {
        "~/Areas/{2}/Views/{1}/{0}.cshtml",
        "~/Areas/{2}/Views/{1}/{0}.vbhtml",
        "~/Areas/{2}/Views/Shared/{0}.cshtml",
        "~/Areas/{2}/Views/Shared/{0}.vbhtml"
    };
    base.ViewLocationFormats = new string[]
    {
        "~/Views/{1}/{0}.cshtml",
        "~/Views/{1}/{0}.vbhtml",
        "~/Views/Shared/{0}.cshtml",
        "~/Views/Shared/{0}.vbhtml"
    };
    base.MasterLocationFormats = new string[]
    {
        "~/Views/{1}/{0}.cshtml",
        "~/Views/{1}/{0}.vbhtml",
        "~/Views/Shared/{0}.cshtml",
        "~/Views/Shared/{0}.vbhtml"
    };
    base.PartialViewLocationFormats = new string[]
    {
        "~/Views/{1}/{0}.cshtml",
        "~/Views/{1}/{0}.vbhtml",
        "~/Views/Shared/{0}.cshtml",
        "~/Views/Shared/{0}.vbhtml"
    };
    base.FileExtensions = new string[]
    {
        "cshtml",
        "vbhtml"
    };
}
网络表单:

public WebFormViewEngine(IViewPageActivator viewPageActivator) : base(viewPageActivator)
{
    base.MasterLocationFormats = new string[]
    {
        "~/Views/{1}/{0}.master",
        "~/Views/Shared/{0}.master"
    };
    base.AreaMasterLocationFormats = new string[]
    {
        "~/Areas/{2}/Views/{1}/{0}.master",
        "~/Areas/{2}/Views/Shared/{0}.master"
    };
    base.ViewLocationFormats = new string[]
    {
        "~/Views/{1}/{0}.aspx",
        "~/Views/{1}/{0}.ascx",
        "~/Views/Shared/{0}.aspx",
        "~/Views/Shared/{0}.ascx"
    };
    base.AreaViewLocationFormats = new string[]
    {
        "~/Areas/{2}/Views/{1}/{0}.aspx",
        "~/Areas/{2}/Views/{1}/{0}.ascx",
        "~/Areas/{2}/Views/Shared/{0}.aspx",
        "~/Areas/{2}/Views/Shared/{0}.ascx"
    };
    base.PartialViewLocationFormats = base.ViewLocationFormats;
    base.AreaPartialViewLocationFormats = base.AreaViewLocationFormats;
    base.FileExtensions = new string[]
    {
        "aspx",
        "ascx",
        "master"
    };
}

您可以在RouteConfig文件的App_Start文件夹中配置路由。如果你加上

            routes.MapRoute(
            name: "", 
            url: "Services/Index/{id}", 
            defaults: new
                          {
                              controller = "Services", 
                              action = "Index", 
                              id = UrlParameter.Optional
                          });
除了routes.IgnoreRoute行之外,您还可以在MVC项目中拥有Services文件夹,以及Services controller及其视图

如果您现在在其他视图中有类似的内容:

@Html.ActionLink("To services", "Index", "Services")

它现在将被呈现为~/Services/Index而不仅仅是~/Services

我相信你是错误的-这取决于Global.asax.cs文件中是否设置为true,以及它们的路由是否与文件路径匹配。这并不能回答问题。感谢您的输入。我没有时间进一步调查。当我添加文件夹时,我确实在其中有一个方法类,但它不是控制器或视图。让我吃惊的是,MVC默认设置为根目录中的Services文件夹,而在视图中跳过Services文件夹。