Asp.net mvc 4 找不到布局页

Asp.net mvc 4 找不到布局页,asp.net-mvc-4,Asp.net Mvc 4,我发现错误:在以下路径中找不到布局页面“\u布局”:“~/Views/Home/\u layout”。 但布局页面位于以下路径:“~/Views/Shared/\u布局” 有什么问题吗 我刚开始这个项目,看起来是这样的: @{ ViewBag.Title = "title"; Layout = "_Layout"; } 控制器: namespace Testing.Controllers { public class HomeController : Contr

我发现错误:在以下路径中找不到布局页面“\u布局”:“~/Views/Home/\u layout”。

但布局页面位于以下路径:“~/Views/Shared/\u布局”

有什么问题吗

我刚开始这个项目,看起来是这样的:

@{ 
    ViewBag.Title = "title"; 
    Layout = "_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>
解决方案资源管理器:


确保在
~/Views/\u ViewStart.cshtml
文件中设置了正确的路径:

@{
    Layout = "~/Views/Shared/_Layout.cshtml";
}
此外,如果在视图中覆盖布局,请确保为此布局指定了正确的路径。除此之外,还可能有一些服务器端代码正在设置布局(例如自定义操作过滤器,或允许指定布局的
ViewResult
重载…)


更新:

您似乎设置了如下布局:

@{ 
    ViewBag.Title = "title"; 
    Layout = "_Layout"; 
} 
您需要将布局的位置指定为绝对路径:

@{ 
    ViewBag.Title = "title"; 
    Layout = "~/Views/Shared/_Layout.cshtml";
} 
但更好的方法是在
索引
视图中取消此布局设置:

@{ 
    ViewBag.Title = "title"; 
}

现在将使用
\u ViewStart.cshtml
中的值。

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

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


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

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

解决此问题的解决方案:

  • 右键单击缺少的视图并打开属性
  • 确保将生成操作设置为内容
  • 更新csproj文件以匹配新的生成操作 而不是这个

    @{ 
        ViewBag.Title = "title"; 
        Layout = "_Layout"; 
    } 
    
    索引视图将是这样的

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

    在你的情况下,我看不到
    \u layout.cshtml
    。。您必须给出
    \u layout.cshtml
    文件的正确路径。。如果文件与
    \u ViewStart.cshtml
    位于同一视图文件夹中,则无需添加
    .cshtml
    部分。 但是,如果您从另一个文件夹引用它,请确保添加如下
    .cshtml
    部分
    \u layout.cshtml

    因此,您必须添加
    \u layout.cshtml
    所在的正确路径。如下

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

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

    我在回答中列出了其他可能的原因。你都检查过了吗?不应该,我刚开始项目哦,那不可能。如果您在VisualStudio中使用默认模板,您不会在运行应用程序而不做任何更改时告诉我您遇到了此错误,是吗?所以我的问题是:为了打破这个默认模板,您对它做了哪些更改?如果你不提供细节,就很难帮助你。我不能读懂你的心思,这就是问题所在!谢谢生成的代码有Layout=“\u Layout”,这有点令人困惑;再次感谢=)这是真的,尽管可能主要是针对Resharper用户。使用Resharper快捷方式创建新的控制器和视图后,您得到的第一件事是line Layout=“\u Layout”,它立即让我想到,“太好了!它知道在哪里查找模板,知道要查找什么文件扩展名。”但它不知道。所以我也从盒子里得到了OP的错误信息。“~/Views/Home/\u Layout”这是指示性的。在视图中是否有任何类似于@layout=“~/Views/Home/\u layout”的语句会引发此错误?不,是这样的:@{ViewBag.Title=“Title”layout=“\u layout”}会有所帮助。将路径设置为@DarinDimitrov指出的路径应该可以修复ReSharper Add View快捷方式中的一个缺陷,该快捷方式生成了line Layout=“\u Layout”;游戏开始有点晚了,但我在过去重命名布局或更改布局时也遇到了同样的问题。除了用从一开始就引用的正确布局重新创建视图之外,我还没有找到解决此问题的方法。接受的答案有什么问题?不需要重复同样的内容!