点击Edit/Delete按钮触发InvalidOperationException:视图未找到
管理员页面Edit/Delete按钮报错排查
问题场景
开发管理员查看、修改用户的网站时,点击页面上的Edit和Delete按钮均触发相同错误。
按钮代码
<td><a asp-controller="Admin" class="btn btn-sm btn-primary" asp-action="Edit" asp-route-id="@item.record_id">Edit</a></td> <td><a asp-controller="Admin" class="btn btn-sm btn-danger" asp-action="Delete" asp-route-id="@item.record_id">Delete</a></td>
错误信息
An unhandled exception occurred while processing the request.
InvalidOperationException: The view 'Edit' was not found. The following locations were searched:
/Views/Admin/Edit.cshtml
/Views/Shared/Edit.cshtml
/Pages/Shared/Edit.cshtml
Microsoft.AspNetCore.Mvc.ViewEngines.ViewEngineResult.EnsureSuccessful(IEnumerableoriginalLocations)
Delete按钮触发的错误内容完全一致,仅将错误信息中的'Edit'替换为'Delete'
项目结构情况
项目的Views目录下仅存在Admin/Index.cshtml,缺少Edit.cshtml和Delete.cshtml文件;Controllers目录包含AdminController.cs。
问题原因与解决方法
核心原因
ASP.NET MVC框架中,当控制器的Action方法未明确指定返回视图时,会自动查找与Action同名的视图文件。当前AdminController里的Edit和Delete方法要么没指定返回内容,要么默认要返回视图,但对应的视图文件不存在,导致报错。
具体解决步骤
- 检查AdminController的Action实现
打开Controllers/AdminController.cs,查看Edit和Delete方法:- 如果是要展示编辑/删除页面,确认是否遗漏创建对应的视图文件;
- 如果是做接口逻辑(不需要返回页面),把方法返回类型改为
IActionResult,使用Json(...)、Ok()等方式返回数据,不要让框架默认去寻找视图。
- 创建缺失的视图文件
若需要返回页面,在Views/Admin目录下新建Edit.cshtml和Delete.cshtml,编写对应的页面代码。 - 验证路由参数传递
确认控制器方法的参数是否能正确接收asp-route-id传递的record_id:如果控制器参数名是id,则无需额外配置;如果参数名是record_id,需要在参数上标注[FromRoute(Name = "record_id")]确保匹配。
内容的提问来源于stack exchange,提问作者Carsi
相关产品推荐
相关产品推荐

