如何使用 View Component 通过名称调用 PartialView 而不是加载 default.cshtml

How can View Component be used to call PartialView by its name instead of loading default.cshtml

我想根据参数接收的 TopUserCount 值加载部分视图。我有不同的 PartialViews 可以满足这个要求。但似乎 View Component 只加载 Default.cshtml

像这样:

public IViewComponentResult Invoke(int TopUserCount)
{
    var items = GetUsers().OrderByDescending(u => u.Points).Take(TopUserCount);
    if(TopUserCount == 1) return View("customView1");
    if (TopUserCount == 2) return View("customView2");
    else
        return View(items);  //defaultView.cshtml
}

您的 if 声明似乎很时髦;我建议使用这样的 case 语句:

public IViewComponentResult Invoke(int TopUserCount)
{
    var items = GetUsers().OrderByDescending(u => u.Points).Take(TopUserCount);
    switch(TopUserCount)
    {
    case 1:
        return View("customView1");
        break; 
    case 2:
        return View("customView2");
        break;
    default:
        return View(items);  //defaultView.cshtml
        break;                   
    }
}

将部分视图放在正确的文件夹结构中很重要。 在这种情况下 'Views\ControllerName\Components\ViewComponentName'

public IViewComponentResult Invoke(int TopUserCount)
{
            var items = GetUsers().OrderByDescending(u => u.Points).Take(TopUserCount);

            if (TopUserCount == 1) return View("customView1", items); 
            else if (TopUserCount == 2) return View("customView2", items); 
            else return View("defaultView", items);        

}

我把你的第二个 if 换成了 else if;或者你应该使用 case 语句,我不会在这里改变太多,但是你的文件结构必须看起来像

Views/Shared/Components/{组件名称}/Default.cshtml 视图/{ControllerName}/Components/{ComponentName}/Default.cshtml