ASP.NET Core MVC Razor从_Layout页面跳转时出现404找不到页面错误
问题原因与解决方案
核心错误
ASP.NET Core MVC框架默认不会直接暴露Views目录下的.cshtml视图文件给外部直接访问,所有请求都要通过控制器+动作的路由规则匹配,你直接访问视图文件路径、写跳转指向.cshtml后缀的地址本身就不符合框架设计逻辑。
默认的MVC路由规则为 {控制器名}/{动作名}/{可选参数},默认控制器为Home、默认动作为Index,路由不会匹配你本地存储视图的文件夹路径。
具体修复步骤
- 调整视图存放位置与命名
你创建了CustomerSearchController,按照框架约定,该控制器下的动作对应的视图默认需要存放在Views/CustomerSearch/目录下,把你现在放在Views/Home/CustomerSearch/下的CustomerSearchView.cshtml移动到Views/CustomerSearch/目录,重命名为Index.cshtml,和你控制器里的Index动作对应。 - 修改前端跳转逻辑
把导航栏调用的JS函数修改为指向控制器动作的路由地址,不要写.cshtml后缀:
因为function SearchClick() { window.location.href = "/CustomerSearch/Index"; return false; }Index是默认动作,你也可以简化写为/CustomerSearch,效果完全一致。 - 确认路由配置正常
检查项目启动文件(.NET 6+为Program.cs,旧版本为Startup.cs)中是否存在默认路由配置,默认生成的项目都会自带如下配置,确保没有被你误删:// .NET 6+ 版本Program.cs中的配置 app.MapControllerRoute( name: "default", pattern: "{controller=Home}/{action=Index}/{id?}");
可选适配方案
如果你不想修改现有视图的名称和存放位置,可以在控制器返回视图时显式指定视图的完整路径,不需要调整文件结构:
public IActionResult Index() { return View("~/Views/Home/CustomerSearch/CustomerSearchView.cshtml"); }
该方案不需要修改视图文件,仅修改控制器代码即可正常访问。
内容的提问来源于stack exchange,提问作者user616076
相关产品推荐
相关产品推荐

