【问题标题】:The layout page could not be found找不到布局页面
【发布时间】:2013-02-17 17:11:53
【问题描述】:

我收到错误:在以下路径中找不到布局页面“_Layout”:“~/Views/Home/_Layout”。

但布局页面位于此路径:“~/Views/Shared/_Layout”

有什么问题?

我刚开始这个项目,它看起来像这样:

控制器:

namespace Testing.Controllers
{
    public class HomeController : Controller
    {
        //
        // GET: /Home/

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

索引视图:

@model dynamic

@{
    ViewBag.Title = "title";
    Layout = "_Layout";
}

<h2>title</h2>

_ViewStart.cshtml:

@{
    Layout = "~/Views/Shared/_Layout.cshtml";
}

解决方案资源管理器:

【问题讨论】:

  • "~/Views/Home/_Layout" 这是指示性的。您是否在 View 中有任何类似 @layout="~/Views/Home/_Layout" 的语句会引发此错误?
  • 不,是这样的:@{ ViewBag.Title = "title";布局 = "_布局"; }
  • 这有帮助。像@DarinDimitrov 指出的那样设置路径应该可以修复它
  • 这是 ReSharper Add-View 快捷方式中的一个缺陷,它生成了 Layout = "_Layout";
  • 游戏有点晚了,但我过去在重命名布局或更改布局时遇到了同样的问题。除了使用从一开始引用的正确布局重新创建视图之外,我还没有找到解决此问题的方法。

标签: asp.net-mvc-4


【解决方案1】:

确保在您的~/Views/_ViewStart.cshtml 文件中设置了正确的路径:

@{
    Layout = "~/Views/Shared/_Layout.cshtml";
}

此外,如果您在视图中覆盖布局,请确保为此布局指定正确的路径。除此之外,可能还有一些设置布局的服务器端代码(例如自定义操作过滤器,或允许指定布局的ViewResult 重载,...)。


更新:

您似乎已经像这样设置了布局:

@{ 
    ViewBag.Title = "title"; 
    Layout = "_Layout"; 
} 

您需要将布局的位置指定为绝对路径:

@{ 
    ViewBag.Title = "title"; 
    Layout = "~/Views/Shared/_Layout.cshtml";
} 

但更好的方法是在您的 Index 视图中删除此布局设置:

@{ 
    ViewBag.Title = "title"; 
}

现在将使用来自您的_ViewStart.cshtml 的值。

【讨论】:

  • 我在回答中列出了其他可能的原因。你都检查了吗?
  • 应该不会吧,我刚开始做项目
  • 哦,那不可能。如果您在 Visual Studio 中使用默认模板,您不会告诉我在不进行任何更改的情况下运行应用程序时遇到此错误,是吗?所以我的问题是:您对这个默认模板做了哪些更改以破坏它?如果您不提供详细信息,则很难为您提供帮助。我无法读懂你的想法。
  • 这就是问题所在!谢谢!生成的代码有 Layout = "_Layout"; 有点令人困惑。再次感谢 =)
  • 确实如此,尽管可能主要针对 Resharper 用户。使用 Resharper 快捷方式创建新控制器和视图后,您得到的第一件事是 Layout="_Layout" 行,它立即让我想到,“太好了!它知道在哪里查找模板并知道要查找的文件扩展名。”但事实并非如此。所以我也收到了 OP 的错误信息。
【解决方案2】:

部署服务后,我遇到了同样的问题,但无法在本地复制。对我来说,问题在于 View 为其构建操作设置了 None。因此错误是正确的,因为该文件在服务器上不存在,尽管它存在于存储库中。

解决方案:

  1. 右键单击缺少的视图并打开 属性 View Properties
  2. 确保构建操作设置为内容
  3. 更新 csproj 文件以匹配新的构建操作。 .csproj file

【讨论】:

    【解决方案3】:

    使用错误的波浪号也会产生此错误。

    确保使用键盘上的波浪号“~”。

    如果您从书中复制代码,波浪号可能是无效字符(请注意,Unicode 中有多个波浪号)。

    【讨论】:

      【解决方案4】:

      在您的情况下,我看不到_layout.cshtml ..您必须提供_layout.cshtml 文件的正确路径。如果该文件与_ViewStart.cshtml 存在于同一视图文件夹中,则无需添加@ 987654324@ 部分。 但如果您从另一个文件夹中引用它,请确保添加 .cshtml 这样的部分 _layout.cshtml ..

      所以你必须添加正确的路径 ware _layout.cshtml 位于。如下所示

      @{
          Layout = "~/Views/Shared/_Layout.cshtml";
          
      }
      

      【讨论】:

        【解决方案5】:

        不是这个

        @{ 
            ViewBag.Title = "title"; 
            Layout = "_Layout"; 
        } 
        

        索引视图会是这样的

        @{ 
            ViewBag.Title = "title"; 
            Layout = "~/Views/Shared/_Layout.cshtml";
        }
        

        【讨论】:

        • 接受的答案有什么问题?无需重复!
        【解决方案6】:

        也许你有一个 PartialView,现在你想在 ActionResult 方法中返回 View 而不是 PartialView。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2023-03-06
          • 2021-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-11-30
          相关资源
          最近更新 更多