我有一个简单的Blazor组件,它遍历一个通用列表:
@typeparam TItem;
@foreach (var item in List)
{
@ElementTemplate(item); // What code should be here to pass i to the ElementTemplate????
i++;
}
@code {
int i = 0;
[Parameter] public List<TItem> List { get; set; }
[Parameter] public RenderFragment<TItem> ElementTemplate { get; set; }
}
我有另一个简单的组件,它将获取一个项目和索引来渲染数据(Employee):
<div> @Index . @Person.Name </div>
@code{
[Parameter] public Person { get; set; }
[Parameter] public int Index { get; set; }
}
在我的主页上,我有以下内容:
<GenericList List="employees">
<ElementTemplate>
<Employee Person="context" Index="?"></Employee>
</ElementTemplate>
</GenericList>
您可以看到,Employee组件需要一个Index参数,我该如何从GenericList组件传递Index? 在这个例子中,变量“i”应该被传递到ElementTemplate以及Generic TItem对象本身。
ElementTemplate
只能接收单个数据项。如果你想让它包含多个数据,你可以让它继承自一个基类或实现一个接口,并将其作为泛型约束使用。或者,将数据项设为dynamic
类型,但这会失去泛型的好处。 - Panagiotis KanavosComponentBase
以用于映射的组件,ViewComponentBase<TModel> : ComponentBase
。 - Brian Parker