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

Posted

技术标签:

【中文标题】未找到视图“索引”或其主视图。【英文标题】:The view 'Index' or its master was not found. 【发布时间】:2011-01-17 04:10:30 【问题描述】:
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 区域时出现此错误。调用了区域控制器操作,但它似乎在“基础”项目视图中查找视图,而不是在区域视图文件夹中。

【问题讨论】:

@çağdaş:它的 ASP.NET MVC2 RC2。 您是否找到了解决此问题的方法,或者您是否只是放弃了 MVCContribs MvcRoute?遇到同样的问题 当时我刚回到“常规”routes.MapRoute()。但是现在您可以使用完全支持 mvc2 的更新后的 MvcContrib。 谢谢门迪。我再试一次。可能只是我是一个菜鸟错过了一些东西。 【参考方案1】:

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

例如:

context.MapRoute(
        "SomeArea_default",
        "SomeArea/controller/action/id",
        new  controller = "SomeController", action = "Index", id = UrlParameter.Optional 
    ).DataTokens.Add("area", "YOURAREANAME");

【讨论】:

当它在 MVC4 中为我工作时,找不到足够快的 chrome 标签来支持它 =) 谁能想到?不认真,谁???这个严重晦涩的问题让我停了好几个小时!谢谢@香农 在 MVC4 中为我工作。 routes.MapRoute( name: "Default", url: "area/controller/action/id", defaults: new area = "General", controller = "Home", action = "Index", id = UrlParameter.Optional ); 还不够。添加DataToken 是必要的。 我尽一切努力使区域工作,这是唯一对我有帮助的答案。 什么是区域和YOURAREANAME?我们在哪里可以找到它?【参考方案2】:

由于您的控制器方法名称与视图名称不同而引发此错误。

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

    对应的Controllers和View文件夹名称相同。 相应的控制器方法和视图页面应该具有相同的名称。 如果您的方法名称与视图名称不同,请在方法中使用return view("viewName")

【讨论】:

谢谢。如前所述(bullet #1)Index.cshtml 位于 Views 文件夹根目录中,而它本应位于 Views[ControllerName] 文件夹中。添加子文件夹并将视图放入已修复的错误中。【参考方案3】:

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

"controller/action/id"

那么,试试这个。

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

示例:假设我们调用Index() 方法。右键单击它。

2.单击 Add View.. 并给出适当的名称。在此示例中,名称应为 Index。

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

【讨论】:

【参考方案4】:

MyAreaAreaRegistration.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 
        );
    

【讨论】:

【参考方案5】:

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

如果视图的构建操作设置为“无”而不是“内容”,则会发生这种情况。

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

【讨论】:

【参考方案6】:

问题是我使用来自MvcContribMvcRoute.MappUrl 来路由context.Routes

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

【讨论】:

您能否添加有关该问题及其解决方案的更多信息?如果可以,请添加任何代码示例。【参考方案7】:

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

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

看看 Phil Haack 的 this post。

【讨论】:

默认视图引擎不会这样做,因为区域现在是 MVC 核心的一部分。 @Mendy 在这种情况下,也许您没有使用 Global.asax 中的MapAreaRoute 扩展方法注册您的路线? @çağdaş:MapAreaRoute 似乎在 MVC2 RC2 中被删除。正如我所说,路由很好,因为控制器被正确调用。 来源:dcs-media.com/Archive/… @Mendy 我没有机会对此进行测试,我在这里进行了疯狂的猜测。但是在注册路线时,您是否需要提供 area 关键字?像这样:routes.MapRoute("Default", "controller/action", new area = "SomeArea", controller = "Home", action = "Index" )【参考方案8】:

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

【讨论】:

是的,这也是发生在我身上的事情。对于未来的观众来说,首先检查这一点很容易实现。【参考方案9】:
    在您的控制器中右键单击 index() 方法 然后点击goto view

如果此操作打开 index.cshtml?

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

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

【讨论】:

【参考方案10】:

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

【讨论】:

【参考方案11】:

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

If Not ControllerContext.RouteData.DataTokens.ContainsKey("area") Then
    ControllerContext.RouteData.DataTokens.Add("area", "MyAreaName")
End If

【讨论】:

【参考方案12】:

如果即使您的区域注册中所有正确的 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;);   

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

【讨论】:

【参考方案13】:

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

控制器:adminController 查看->Admin->view1.cshtml

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

【讨论】:

【参考方案14】:

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

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

【讨论】:

【参考方案15】:

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

希望有帮助

【讨论】:

【参考方案16】:

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

ViewEngines.Engines.Add(new RazorViewEngine());

【讨论】:

【参考方案17】:

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

ViewLocationFormats = new[] 
            "~/Views/1/0.cshtml",
            "~/Views/Shared/0.cshtml",
            "~/Areas/Admin/Views/1/0.cshtml",
            "~/Areas/Admin/Views/Shared/0.cshtml"
        ;

【讨论】:

以上是关于未找到视图“索引”或其主视图。的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 5.3 - InvalidArgumentException 视图 [索引] 未找到 [重复]

未找到 Laravel 注册索引并创建错误

部署到生产时找不到索引视图?

索引未应​​用于索引视图

是否可以在 MySQL 中有索引视图?

无法在视图上创建索引,因为视图未绑定架构 [重复]