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

我是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 = , action = "Index", id = UrlParameter.Optional } ); 

我的控制器内容:

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

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

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

 Controllers (folder) HomeController (.cs) AccountController (.cs) Views (folder) Home (folder) Index (.cshtml) Account (folder) Index (.cshtml) 

我以前曾经遇到过这个问题几次,它可以是任何其他答案,但它也可能是造成问题的Build Action。

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

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

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

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

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

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

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

您的构建中可能有旧的/坏的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

这将解决这些问题。

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

在此处输入图像描述

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

在此处输入图像描述

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

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

一个有用的诊断步骤是右键单击Controller的Action,选择“Go To View”。

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

 /Area/Controller/Action