我有许多视图组件,并在Page Maker软件中使用。但现在我需要为每个视图组件制作一个动态设置页面。
类似这样的东西:
@Component.InvokeAsync("Image");
@Component.InvokeSettingPage("Image");
或者任何制作这样东西的想法。
提前谢谢。
似乎不能对ViewComponent进行两次调用。从.net core 6开始,InvokeAsync方法中可以有多个属性,然后根据这些属性,您可以决定渲染什么或要做什么。
更多信息,你可以在这里找到-ViewComponent与可选参数
祝你好运!
参数将传递给InvokeAsync方法。本文中开发的PriorityList视图组件是从Views/ToDo/Index.cshtml视图文件中调用的。在下文中,InvokeAsync方法使用两个参数进行调用
namespace ViewComponentSample.ViewComponents
{
public class PriorityListViewComponent : ViewComponent
{
private readonly ToDoContext db;
public PriorityListViewComponent(ToDoContext context)
{
db = context;
}
public async Task<IViewComponentResult> InvokeAsync(
int maxPriority, bool isDone)
{
var items = await GetItemsAsync(maxPriority, isDone);
return View(items);
}
private Task<List<TodoItem>> GetItemsAsync(int maxPriority, bool isDone)
{
return db.ToDo.Where(x => x.IsDone == isDone &&
x.Priority <= maxPriority).ToListAsync();
}
}
}
@await Component.InvokeAsync("PriorityList", new { maxPriority = 4, isDone = true })
下面是一个用于动态呈现组件的示例代码。你可以通过参数whit Json在ViewComponent像这个
@foreach(var component in Model.SelectedComponent)
{
<div class="component">
@await Component.InvokeAsync(component.Name, component.OptionalJsonString)
</div>
}