如何将 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" />

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...