Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用视图组件按其名称调用PartialView,而不是加载default.cshtml_C#_Asp.net Core_Asp.net Core Viewcomponent - Fatal编程技术网

C# 如何使用视图组件按其名称调用PartialView,而不是加载default.cshtml

C# 如何使用视图组件按其名称调用PartialView,而不是加载default.cshtml,c#,asp.net-core,asp.net-core-viewcomponent,C#,Asp.net Core,Asp.net Core Viewcomponent,我想根据参数接收的TopUserCount值加载部分视图。我有不同的PartialView可满足此要求。但视图组件似乎只加载Default.cshtml 大概是这样的: public IViewComponentResult Invoke(int TopUserCount) { var items = GetUsers().OrderByDescending(u => u.Points).Take(TopUserCount); if(TopUserCount == 1) r

我想根据参数接收的TopUserCount值加载部分视图。我有不同的PartialView可满足此要求。但视图组件似乎只加载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
}
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;                   
    }
}

你的
if
语句看起来很古怪;我建议使用如下的
案例
语句:

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
}
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;                   
    }
}

将局部视图放置在右侧文件夹结构处非常重要。 在本例中,在“视图\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语句,在这里我不会做太多更改,但是您的文件结构必须看起来像

视图/Shared/Components/{ComponentName}/Default.cshtml 视图/{ControllerName}/Components/{ComponentName}/Default.cshtml