如何使用 Class/IViewComponentResult return 正确的布局部分视图而不使用 Class/Method/~/view/shared/_pg.cshtml .Net Core 获取路由

How to return a correct layout partial view with Class/IViewComponentResult and not get the route with Class/Method/~/view/shared/_pg.cshtml .Net Core

在我的 _pageLayout 中,我尝试像这样进行局部视图

@{Layout = "~/Views/Shared/_Layout.cshtml";} 
<div> @await Component.InvokeAsync("_PageMenu") </div>

我创建了一个名为 Component 的文件夹和一个名为 _PageMenuViewComponent

的 Class
public class _PageMenuViewComponent:ViewComponent
{
    private readonly SYS_menu_mstr_Repo _sys_menu_mstr_repo;
    public _PageMenuViewComponent(SYS_menu_mstr_Repo sys_menu_mstr_repo)
    {
        _sys_menu_mstr_repo = sys_menu_mstr_repo;
    }
    public IViewComponentResult Invoke()
    {
        var menuList = _sys_menu_mstr_repo.Get_ALL_Menu_Mstr();
        return View("~/View/Shared/_PageMenu.cshtml", menuList);
    }
}

并且总是得到这样的路线:

InvalidOperationException: The view 'Components/_PageMenu/~View/Shared/_PageMenu.cshtml' was not found. The following locations were searched:
~View/Shared/_PageMenu.cshtml

AspNetCore.Views_Shared__PageLayout.ExecuteAsync() in _PageLayout.cshtml
+
        @await Component.InvokeAsync("_PageMenu")

我不想在 startup.cs 中更改 MapControllerRoute 因为它只是用于布局的局部视图。

以后在Controller中写东西的时候会用到

我如何 return 我 class/method 中模型的准确视图?

  1. 在 Shared 文件夹中,您必须创建一个 Components 文件夹,然后是 _PageMenu 文件夹。将部分视图放在那里。

  2. 在 Controllers 文件夹中创建 class

[ViewComponent(Name = "_PageMenu")]
public _PageMenuViewComponent(SYS_menu_mstr_Repo sys_menu_mstr_repo)
{
.....
return View("_PageMenu", menuList);

}