59
The view 'Index' or its master was not found. The following locations were searched:
~/Views/ControllerName/Index.aspx
~/Views/ControllerName/Index.ascx
~/Views/Shared/Index.aspx
~/Views/Shared/Index.ascx

使用 ASP.Net mvc 区域时出现此错误。区域控制器操作被调用,但它似乎在“基础”项目视图中而不是在区域视图文件夹中查找视图。

4

17 回答 17

53

您需要做的是为您的区域名称设置一个令牌:

例如:

context.MapRoute(
        "SomeArea_default",
        "SomeArea/{controller}/{action}/{id}",
        new { controller = "SomeController", action = "Index", id = UrlParameter.Optional }
    ).DataTokens.Add("area", "YOURAREANAME");
于 2010-09-17T05:33:35.470 回答
29

引发此错误是因为您的控制器方法名称与视图名称不同。

如果您右键单击控制器方法并选择 Go To View (Ctrl+M,Ctrl+G),它将打开一个视图(成功)或抱怨找不到一个视图(您所看到的)。

  1. 对应的 Controllers 和 View 文件夹名称同名。
  2. 相应的控制器方法和视图页面应该具有相同的名称。
  3. 如果您的方法名称与视图名称不同,return view("viewName")请在方法中。
于 2012-09-30T10:15:12.493 回答
14

Global.asax 文件包含 URL 路由。像这样的默认 URL 路由。

"{controller}/{action}/{id}"

所以,试试这个。

1. 右键单击​​您的控制器方法,如下所示。

示例:假设我们调用Index()方法。右键单击它。 在此处输入图像描述

2. 单击添加视图.. 并给出适当的名称。在此示例中,名称应为索引。

在此处输入图像描述

然后它将通过使用相关文件夹结构创建来添加正确的视图。

于 2015-09-16T16:17:23.127 回答
10

检查MyArea AreaRegistration.cs 生成的代码,并确保控制器参数设置为您的默认控制器,否则控制器将被称为 bot 由于某种原因 ASP.NET MVC 不会搜索区域文件夹中的视图

public override void RegisterArea(AreaRegistrationContext context)
    {
        context.MapRoute(
            "SomeArea_default",
            "SomeArea/{controller}/{action}/{id}",
            new { controller = "SomeController", action = "Index", id = UrlParameter.Optional }
        );
    }
于 2010-06-06T20:06:30.537 回答
6

如果仅在部署到 Web 服务器时发生此错误,则问题可能是因为未正确部署视图。

如果将视图的构建操作设置为 None 而不是 Content,则可能发生这种情况的一个示例。

检查视图是否正确部署的一种方法是导航到 Web 服务器上站点的物理路径并确认视图是否存在。

于 2012-10-25T09:16:04.517 回答
4

问题是我使用MvcRoute.MappUrlfromMvcContrib来路由context.Routes.

路由映射器似乎对MvcContrib区域路由感到不舒服。

于 2010-02-16T01:09:03.930 回答
3

您很可能没有创建自己的视图引擎。
默认视图引擎在~/Views/[Controller]/和中查找视图~/Views/Shared/

您需要创建自己的视图引擎以确保在区域视图文件夹中搜索视图。

看看 Phil Haack 的这篇文章

于 2010-02-15T22:47:34.587 回答
2

我今天遇到了这个问题,一个简单的开箱即用的 VS 2013 MVC 5 项目手动部署到我在 Windows 8 上的本地 IIS 实例。事实证明,正在使用的应用程序池没有正确访问应用程序(文件夹、 ETC。)。重置我的应用程序池身份后,它工作正常。

于 2014-11-04T17:33:58.840 回答
2
  1. 右键单击index()控制器中的方法
  2. 然后点击goto view

如果此操作打开 index.cshtml?

您的问题是 IIS 池没有权限访问视图的物理路径。

您可以通过授予权限对其进行测试。例如:- 转到c:\inetpub\wwwroot\yourweb然后右键单击 yourweb 文件夹 -> 属性 -> 安全并添加组名每个人,并允许完全控制您的站点。希望这可以解决您的问题。

于 2016-08-05T14:23:49.333 回答
1

在最终版本中仍然存在问题......当您从上下文菜单/添加/区域创建区域时,Visual Studio 不会将控制器放在 MapRoute 方法的最后一个参数中。你需要照顾它,就我而言,每次创建新区域时我都必须手动放置它。

于 2010-06-22T14:22:57.053 回答
0

即使在您的区域注册中使用了所有正确的 MapRoutes,您也​​会收到此错误。尝试将此行添加到您的控制器操作中:

If Not ControllerContext.RouteData.DataTokens.ContainsKey("area") Then
    ControllerContext.RouteData.DataTokens.Add("area", "MyAreaName")
End If
于 2011-11-16T15:35:39.427 回答
0

如果即使您的区域注册中所有正确的 MapRoutes 以及所有其他基本配置都可以,您也会收到此错误。

这是这种情况:

我使用了下面提到的 Jquery 文件中的代码来回发数据,然后从控制器操作方法加载视图。

$.post("/Customers/ReturnRetailOnlySales", {petKey: '<%: Model.PetKey %>'}); 

上面的 jQuery 代码我没有提到成功回调函数。发生了什么是在完成关于操作方法的回发场景之后,没有路由到我的预期视图,它回到了 Jquery 端并给出了上面的视图未找到错误。

然后我给出了一个像下面这样的解决方案,它的工作没有任何问题。

 $.post("/Customers/ReturnRetailOnlySales", {petKey: '<%: Model.PetKey %>'},
      function (data) {
 var url = Sys.Url.route('PetDetail', { action: "ReturnRetailOnlySalesItems", controller: "Customers",petKey: '<%: Model.PetKey %>'});
 window.location = url;});   

注意:我在成功回调函数中将我的请求发送到了我预期的视图操作方法。然后视图引擎找到了相关区域的视图文件并正确加载。

于 2012-11-03T19:59:51.370 回答
0

我也遇到过这个问题;我注意到我错过了将视图页面包含在名称与控制器相同的文件夹中。

控制器:adminController View->Admin->view1.cshtml

(它是 View->view1.cshtml)(没有文件夹:Admin)

于 2013-06-25T00:09:52.943 回答
0

如果您的 MSI 安装程序未能实际部署文件,也会出现此错误。

就我而言,发生这种情况是因为我将 .aspx 文件转换为 .cshtml 文件,而 Visual Studio 认为这些是全新的文件,并将构建操作设置为无而不是内容。

于 2015-02-11T17:22:24.767 回答
0

我在这里遇到了同样的问题,你猜怎么着……查看 csproj 的 xml 结构,我注意到 Content 节点(在 ItemGroup 节点内)为“无”……不知道为什么,但这就是我的原因遇到了同样的错误,只是像其他人一样将其编辑为“内容”,并且它正在工作。

希望有帮助

于 2015-07-19T20:00:08.853 回答
0

在项目内部的方法中添加以下代码Application_Start()

ViewEngines.Engines.Add(new RazorViewEngine());
于 2019-11-14T11:47:56.213 回答
0

我将 viewlocationformat 添加到 RazorViewEngine 并为我工作。

ViewLocationFormats = new[] {
            "~/Views/{1}/{0}.cshtml",
            "~/Views/Shared/{0}.cshtml",
            "~/Areas/Admin/Views/{1}/{0}.cshtml",
            "~/Areas/Admin/Views/Shared/{0}.cshtml"
        };
于 2020-09-22T05:28:17.177 回答