微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何将 RenderFragement<object> 模板传递给 Blazor 组件

如何解决如何将 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 举报,一经查实,本站将立刻删除。