【问题标题】: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。
  • 谢谢门迪。我再试一次。可能只是我是一个菜鸟错过了一些东西。

标签: asp.net-mvc asp.net-mvc-routing asp.net-mvc-areas


【解决方案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),它将打开一个视图(成功)或抱怨找不到一个视图(您所看到的)。

  1. 对应的Controllers和View文件夹名称相同。
  2. 相应的控制器方法和视图页面应该具有相同的名称。
  3. 如果您的方法名称与视图名称不同,请在方法中使用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 中被删除。正如我所说,路由很好,因为控制器被正确调用。
        • @Mendy 我没有机会对此进行测试,我在这里进行了疯狂的猜测。但是在注册路线时,您是否需要提供 area 关键字?像这样:routes.MapRoute("Default", "{controller}/{action}", new { area = "SomeArea", controller = "Home", action = "Index" })
        【解决方案8】:

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

        【讨论】:

        • 是的,这也是发生在我身上的事情。对于未来的观众来说,首先检查这一点很容易实现。
        【解决方案9】:
        1. 在您的控制器中右键单击 index() 方法
        2. 然后点击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"
                                };
                        

                        【讨论】:

                          猜你喜欢
                          • 2016-04-10
                          • 1970-01-01
                          • 2020-06-29
                          • 2013-06-23
                          • 2012-04-29
                          • 2013-08-18
                          • 2012-08-21
                          • 1970-01-01
                          相关资源
                          最近更新 更多