Visual Studio 2013 MVC5.1报错:Layout不存在于当前上下文
针对Mvc 5.1 + VS2013的"The name 'Layout' does not exist in the current context"错误排查
既然你已经试过Stack Overflow上的常规方案还没解决,那咱们聚焦Mvc5.1和VS2013更新后的特定配置点来检查——版本不匹配或配置节缺失是这类问题的高发原因:
1. 检查项目根目录的web.config配置
确认程序集引用版本正确
Mvc5.1对应Razor 3.1.0.0版本,你需要确保根web.config里的assemblies节点包含正确版本的引用,不能混有旧版本:
<assemblies> <add assembly="System.Web.Mvc, Version=5.1.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" /> <add assembly="System.Web.Razor, Version=3.1.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" /> <add assembly="System.Web.WebPages, Version=3.1.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" /> </assemblies>
确认configSections的Razor配置节版本匹配
根web.config的configSections里的razor组必须对应3.1.0.0版本,否则会导致Razor引擎加载错误:
<configSections> <sectionGroup name="system.web.webPages.razor" type="System.Web.WebPages.Razor.Configuration.RazorWebSectionGroup, System.Web.WebPages.Razor, Version=3.1.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"> <section name="host" type="System.Web.WebPages.Razor.Configuration.HostSection, System.Web.WebPages.Razor, Version=3.1.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" /> <section name="pages" type="System.Web.WebPages.Razor.Configuration.RazorPagesSection, System.Web.WebPages.Razor, Version=3.1.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" /> </sectionGroup> </configSections>
2. 检查/Views/web.config的核心配置(重中之重)
这个文件的配置直接决定视图的编译环境,最容易出问题:
确认Razor Host工厂和页面基类正确
必须指定Mvc专属的Razor主机工厂,并且页面基类要继承System.Web.Mvc.WebViewPage(不是普通WebPages的基类):
<system.web.webPages.razor> <host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=5.1.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" /> <pages pageBaseType="System.Web.Mvc.WebViewPage"> <namespaces> <add namespace="System.Web.Mvc" /> <add namespace="System.Web.Mvc.Ajax" /> <add namespace="System.Web.Mvc.Html" /> <add namespace="System.Web.Routing" /> <!-- 别漏掉这些核心Mvc命名空间,否则很多内置属性/方法都会找不到 --> </namespaces> </pages> </system.web.webPages.razor>
确认编译节点的程序集引用
和根web.config保持版本一致:
<compilation> <assemblies> <add assembly="System.Web.Mvc, Version=5.1.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" /> <add assembly="System.Web.Razor, Version=3.1.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" /> </assemblies> </compilation>
3. 其他容易忽略的排查点
- 视图文件的继承指令:检查报错的
.cshtml文件里有没有手动修改@inherits指令,如果改成了System.Web.WebPages.WebViewPage,就会丢失Mvc的Layout属性,改回System.Web.Mvc.WebViewPage即可。 - 清理缓存与重新生成:删除项目下的
bin、obj目录,然后在VS里执行「清理解决方案」→「重新生成解决方案」,VS更新后残留的旧编译文件可能导致版本冲突。 - NuGet包完整性:打开NuGet包管理器,确认
Microsoft.AspNet.Mvc是5.1.x版本,没有同时安装其他版本的Mvc包。如果有冲突,先卸载所有Mvc相关包,再重新安装5.1版本。 - 视图目录位置:确保你的视图文件都在
/Views目录下(或Area的Views子目录),如果放在其他目录,不会自动应用/Views/web.config的配置,也会导致找不到Layout。
内容的提问来源于stack exchange,提问作者Sumedha Vangury
相关产品推荐
相关产品推荐

