c# - 将附加数据传递给 Blazor 组件中的通用 RenderFragment
问题描述
我有一个简单的 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; }
}
我有另一个简单的组件,它将获取一个项目和一个索引来呈现数据(员工):
<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 对象本身。
解决方案
我发现快速/简单的方法是使用元组作为 RenderFragment 上下文:
@foreach (var item in List)
{
@ElementTemplate((item,i));
i++;
}
@code {
int i=0;
[Parameter] public List<TItem> List { get; set; }
[Parameter] public RenderFragment<(TItem item, int index)> ElementTemplate { get; set; }
}
然后你的标记变成:
<GenericList List="employees">
<ElementTemplate>
<Employee @key=@context.index Person=@context.item Index=@context.index></Employee>
</ElementTemplate>
</GenericList>
如果您愿意,可以在 GenericList 中使用实用程序类而不是元组。
推荐阅读
- java - Oracle 函数中的默认值
- c - 对于 n 个 16 位值,如何在 8-10 个字节的数据中填充任意数量的值?
- c# - 在实体框架中添加新记录时未自动设置外键
- java - 如何使用特定区域本地化 Android 的谷歌地图(以遵守当地边界和法律)
- javascript - ReactJs 应用程序因错误“考虑将错误边界添加到您的树”而崩溃
- javascript - 显示带有时区的 freemarker 格式化时间
- android - 如何为 WifiP2pDevice 设置当前设备`secondaryDeviceType`?
- javascript - Yammer 嵌入提要在共享点页面上间歇性地抛出 404 not found 错误
- graphql - 自定义输入类型的 Apollo 数组作为 Mutation 参数抛出“__typename”:未知字段错误
- forms - 在 symfony 和 api ovh 上发送短信