点击按钮跳转视图失败:Test.cshtml视图未找到问题排查
根据你描述的错误信息和场景,这个问题核心是视图引擎的搜索路径和实际视图文件的存放路径不匹配,下面分几种常见原因和对应的解决方法:
1. Action返回视图时未指定正确路径
MVC默认会按约定搜索视图:~/Views/[控制器名]/[Action名].cshtml 或者 ~/Views/Shared/[Action名].cshtml。如果你的Test.cshtml实际存放在~/Views/SecondGroup/Test/子文件夹下,那SecondController里对应的Action必须明确指定视图路径,不能依赖默认约定。
比如,如果视图路径是~/Views/SecondGroup/Test/Test.cshtml,Action里应该这样返回:
public ActionResult TargetAction() { // 方式1:指定完整视图路径 return View("~/Views/SecondGroup/Test/Test.cshtml"); // 方式2:用控制器文件夹下的相对路径 // return View("Test/Test"); }
从错误提示里搜索了~/Views/SecondGroup/123.cshtml来看,你的Action可能返回了View("123"),但实际目标视图在Test子文件夹里,所以必须补上子目录路径。
2. 按钮跳转的路由指向错误
检查ViewOne.cshtml里按钮的跳转逻辑,不管是用Html.ActionLink还是表单提交,要确保指向了正确的Action和控制器:
比如用ActionLink跳转:
@Html.ActionLink("跳转至Test视图", "TargetAction", "Second")
或者表单提交:
@using (Html.BeginForm("TargetAction", "Second", FormMethod.Get)) { <input type="submit" value="跳转" /> }
如果项目有自定义路由规则,也要确认路由能正确映射到SecondController的目标Action,避免路由匹配错误导致Action返回错误的视图路径。
3. 视图文件的命名或存放位置有误
- 确认
Test.cshtml的文件名拼写正确(注意大小写!Windows本地可能不敏感,但部署到Linux服务器会严格区分); - 确认文件确实存放在你说的
~/Views/SecondGroup/Test/路径下,而不是误放到Shared文件夹或其他控制器目录; - 如果项目使用了区域(Area),要确认视图是否在对应区域的Views文件夹下,而非根目录的Views。
4. 视图引擎配置问题(较少见)
如果项目同时启用了Web Forms(aspx/ascx)和Razor(cshtml)视图引擎,可检查Global.asax或Startup.cs里是否正确注册了Razor引擎,确保它能搜索到cshtml文件。不过从错误提示看已经搜索了cshtml路径,这个可能性较低。
总结来说,最可能的原因是Action返回视图时没指定子文件夹路径,或者跳转路由未指向正确Action,导致视图引擎在默认路径下找不到目标视图。你可以先检查SecondController里的Action代码,确认返回视图的语句是否正确。
内容的提问来源于stack exchange,提问作者Karen Slon

