ASP.Net Core 2.0中_ViewStart.cshtml未被视图读取的问题排查
嘿,我来帮你搞定这个问题!你遇到的情况其实是因为ASP.NET Core里_ViewStart.cshtml的工作逻辑和.NET Framework 4.5有明显区别,尤其是文件放置的位置要求不一样。
核心问题:_ViewStart.cshtml的位置放错了
在ASP.NET Core中,_ViewStart.cshtml的查找路径不包含Views/Shared目录!它的查找逻辑是:当渲染某个视图时,会从该视图所在的目录开始,逐级向上遍历到Views根目录,只会读取这些位置的_ViewStart.cshtml。而你把它放在了Views/Shared下,这个位置不在默认的查找链里,所以Index视图根本找不到它。
快速解决步骤
移动_ViewStart.cshtml到正确位置
把你现在的Views/Shared/_ViewStart.cshtml直接移动到Views/_ViewStart.cshtml(也就是Views根目录下)。这样所有视图都会自动继承这个文件里的Layout设置。确认Startup.cs的MVC配置
因为你用的是空站点模板,默认可能没有启用MVC相关配置,需要确保Startup.cs里有以下代码:- 在
ConfigureServices方法中添加:services.AddMvc(); - 在
Configure方法中添加(确保在app.UseStaticFiles()之后):app.UseMvc(routes => { routes.MapRoute( name: "default", template: "{controller=Home}/{action=Index}/{id?}"); });
空模板默认可能没有这些配置,会导致视图引擎无法正常识别_ViewStart的存在。
- 在
验证视图目录结构
确保你的Index.cshtml放在正确的目录下,比如Views/Home/Index.cshtml(对应默认路由的Home控制器Index方法),这样视图引擎才能正确找到Views根目录下的_ViewStart。
额外说明:ASP.NET Core的_ViewStart查找顺序
举个例子,当渲染Views/Home/Index.cshtml时,系统会按以下顺序查找_ViewStart:
Views/Home/_ViewStart.cshtml(优先读取当前视图目录的设置)Views/_ViewStart.cshtml(其次读取根目录的全局设置)
完全不会去Views/Shared目录找,这是和.NET Framework最关键的区别之一。
做完这些调整后,你再注释掉Index.cshtml里的Layout行,按F5调试应该就能正常加载布局了!
内容的提问来源于stack exchange,提问作者Matthew Verstraete

