.NET Core ViewComponent返回指定分部视图路径找不到如何解决
问题修复方案
根因定位
错误由两点拼写/格式问题导致:
- 视图目录名拼写错误:ASP.NET Core默认的视图根目录是
Views(复数),你写的路径中误写为单数View - 路径格式校验异常:拼写错误的路径不符合系统可识别的绝对视图路径规则,导致ViewComponent自动拼接了组件默认查找前缀
Components/_PageMenu/,才出现报错里的异常拼接路径
修复方法(无需修改路由配置)
方案1:直接修正绝对路径(适配现有代码结构,不需要移动视图文件)
把_PageMenuViewComponent的Invoke方法中的视图路径修正为正确拼写即可,模型参数可以正常传递:
public IViewComponentResult Invoke() { var menuList = _sys_menu_mstr_repo.Get_ALL_Menu_Mstr(); // 仅需把路径中的View改为Views即可 return View("~/Views/Shared/_PageMenu.cshtml", menuList); }
方案2:遵循ViewComponent约定路径(后续无需写全路径,更易维护)
如果不想每次写全路径,可以遵循ASP.NET Core的ViewComponent视图默认查找规则调整文件位置:
- 在
Views/Shared目录下新建Components文件夹,再新建和组件同名的_PageMenu文件夹 - 把
_PageMenu.cshtml移动到上述新建的_PageMenu文件夹下,重命名为Default.cshtml - Invoke方法可以简化为如下写法,模型仍可正常传递:
public IViewComponentResult Invoke() { var menuList = _sys_menu_mstr_repo.Get_ALL_Menu_Mstr(); // 不需要指定路径,系统自动查找约定位置的Default视图 return View(menuList); }
内容的提问来源于stack exchange,提问作者Rick
相关产品推荐
相关产品推荐

