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

时间:2016-03-13 22:26:35

标签: c# asp.net-core asp.net-core-viewcomponent

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

3 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

将部分视图放在右侧文件夹结构中非常重要。 在这种情况下,在'Views \ ControllerName \ Components \ ViewComponentName'

答案 2 :(得分:0)

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 if else if;或者您应该使用case语句,这里不会有太大变化,但是您的文件结构必须看起来像

查看/共享/组件/ {组件名称} /Default.cshtml 查看/ {ControllerName} /组件/ {组件名称} /Default.cshtml