未找到“索引”视图或其主页

时间:2014-08-08 18:28:07

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

我是C#MVC项目类型的新手,当我创建一个空的C#MVC项目时,我注意到以下错误:

The view 'Index' or its master was not found or no view engine supports the searched locations. The following locations were searched:
~/Views/ControllerName/Index.aspx
~/Views/ControllerName/Index.ascx
~/Views/Shared/Index.aspx
~/Views/Shared/Index.ascx
~/Views/ControllerName/Index.cshtml
~/Views/ControllerName/Index.vbhtml
~/Views/Shared/Index.cshtml
~/Views/Shared/Index.vbhtml

我在Views文件夹下有“Index.cshtml”文件。为什么MVC引擎不直接在Views文件夹下?我该如何解决这个问题?

我的RouteConfig.cs内容是:

 routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

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

我的控制器内容:

 public ActionResult Index()
        {
            return View();
        }

9 个答案:

答案 0 :(得分:25)

MVC在views文件夹下查找视图(如Index),但它们也必须位于以其控制器命名的文件夹下(除了partial之外的一些例外)。

因此,这是您要在项目中遵循的结构

Controllers (folder)
    HomeController (.cs)
    AccountController (.cs)

Views (folder)
    Home (folder)
        Index (.cshtml)
    Account (folder)
        Index (.cshtml)

答案 1 :(得分:19)

我之前遇到过这个问题几次,它可以是任何其他答案,但它也可能是造成问题的构建行动。

如果右键单击您遇到问题的.cshtml / .vbhtml文件,请选择“属性”,然后在属性窗口中将“构建操作”设置为内容,这样就可以解决方案你的问题。

答案 2 :(得分:5)

MVC引擎在“共享”下或在名称类似于控制器类前缀的文件夹下搜索视图。因此,如果您有ABCController,则需要在Index.cshtml文件夹下显示Views/ABC视图。

PS:在你的例子中,你的控制器名称有一个后缀(ControllerName),我认为这不是一个好习惯,总是命名你的控制器[Name]Controller

答案 3 :(得分:2)

当返回视图时,它期望关联的.cshtml文件与该区域的控制器布局位于相同的视图文件夹结构中(如果没有使用区域,则只有1个视图文件夹和1个控制器文件夹)。控制器名称将是views文件夹中的文件夹名称,actionresult名称将是.cshtml文件的预期名称。

幸运的是,有一种简单的方法可以解决缺少视图文件的情况。右键单击Index获取您的操作结果,然后选择添加视图。单击“确定”,它将在正确的文件夹中为您创建Index.cshtml。现在,当您运行项目并导航到Index时,您将会看到这一点。

答案 4 :(得分:1)

如果将代码手动部署到IIS实例,请确保IIS中该应用程序使用的应用程序池标识具有应用程序中文件夹的权限。

诊断代码是否有问题或IIS设置有问题的好方法是在VS 201X调试器中运行它。如果它在那里运行,但不能直接在IIS下运行,那么应用程序池身份安全性很可能会被提升。

答案 5 :(得分:1)

您的构建中可能有旧的/坏的ASP.Net程序集。

如果您确定确定,那么您的控制器,命名空间和视图名称都在正确的位置,那么您的MVC / ASP程序集很可能在使用当前的Mono环境时遇到问题。

如果您已尝试复制所有可以找到的.Net程序集并将其标记到bin中,那么Mono或其配置很可能无法正确融合 - 您不再需要这样做了。 将计算机更新到最新的Mono版本时遇到此问题。我从我的bin中擦除了这些程序集,并在Mono MVC Packages文件夹中NuGet了最新的程序集。

你会看到的第一件事是:

  • Microsoft.AspNet.Mvc
  • Microsoft.AspNet.Infrastructure
  • Microsoft.AspNet.WebPages
  • Microsoft.AspNet.Razor

这将解决这些问题。

答案 6 :(得分:1)

我有一个未正确引用实际目录的虚拟目录。 (在Windows上)我通过进入IIS(Internet信息服务管理器)并右键单击未正确引用的虚拟目录(在您的情况下为Views)来修复此问题。 虚拟目录旁边会显示这个小图标:

enter image description here

右键单击,然后选择Manage Virtual Directory&gt; Advanced Settings。确保物理路径匹配您认为应该到达的位置:

enter image description here

这不适用于所有情况,但它可能与某些情况匹配。

答案 7 :(得分:1)

我知道这是一个很老的帖子,但我遇到了在Ubuuntu 16.04和Mono 4.2.1上运行的相同情况,但没有一个有帮助。我开始挖掘其他东西,一周后我发现由于某种原因,Microsoft.Web.WebPages.OAuth.dll导致了这个错误。在删除了那个dll并删除了所有的refrenses之后(我还没有使用open auth)一切都立即开始工作,即使使用MySQL的简单成员资格。所以我想发布这个,以防其他人在Mono和Linux上遇到同样的情况,因为谷歌会出现这种情况。

答案 8 :(得分:0)

一个有用的诊断步骤是右键单击Controller的操作,选择&#34; Go To View&#34;。

如果Visual Studio可以找到该视图,那么它可能位于正确的文件夹中,因此请重新检查您的URL。例如,如果使用区域,则区域名称应位于URL中:

/Area/Controller/Action