如何使用 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
我想根据参数接收的 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