如何解决如何将 RenderFragement<object> 模板传递给 Blazor 组件
我一直在做一件特别的事情,我尝试将 RenderFragment 对象传递给动态生成的组件。
我考虑过这个来自 Devexpress https://docs.devexpress.com/Blazor/401753/common-concepts/customize-and-reuse-components
<DxFormlayout>
<DxFormlayoutTabPages>
@renderLayoutTabPage()
</DxFormlayoutTabPages>
</DxFormlayout>
@code {
private RenderFragment renderLayoutTabPage() {
RenderFragment item = b => {
b.OpenComponent<DxFormlayoutTabPage>(0);
b.AddAttribute(1,"Caption","My tab");
b.AddAttribute(2,"ChildContent",(RenderFragment)((tabPageBuilder) => {
tabPageBuilder.OpenComponent<DxFormlayoutItem>(0);
tabPageBuilder.AddAttribute(1,"DynLayoutItem");
tabPageBuilder.AddAttribute(2,"ColSpanMd",6);
tabPageBuilder.AddAttribute(5,"Template",(RenderFragment<Object>)((context) => ((itemTemplate) => {
itemTemplate.OpenComponent<DxTextBox>(0);
itemTemplate.AddAttribute(1,"Text",text);
itemTemplate.CloseComponent();
})));
tabPageBuilder.CloseComponent();
}));
b.CloseComponent();
};
return item;
}
}
这就是他们构建一个全新的 ChildContent Fragment 的方式。
我的剃刀文件看起来像:
[Parameter] RenderFragment<object> displayTemplate {get;set;} //pass this Fragement to the dynamic component
protected override void OnInitialized()
{
...
b.AddAttribute(3,nameof(DxDataGridColumn.displayTemplate),(RenderFragment<Object>)((context) => ((itemTemplate) =>
{
itemTemplate.AddContent<object>(0,displayTemplate,context);
})));
...
}
当我运行这个时,displayTemplate 没有被渲染。我只能看到类型字符串“Microsoft.AspNetCore.Components.RenderFragment`1[System.Object]”
我在这里做错了什么?
解决方法
明白了!
在我的组件中我使用了这种模式
<MyComponent>
<DisplayTemplate>
@DisplayTemplate
</DisplayTemplate>
<MyComponent>
正确工作的唯一方法是直接使用属性:
<MyComponent DisplayTemplate"@DisplayTemplate" />
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。