网站工程师招聘,长沙网标集团,办公室空间装修设计,学做衣服网站知乎原文链接#xff1a;https://blazor-university.com/templating-components-with-renderfragements/passing-data-to-a-renderfragement/将数据传递给 RenderFragment源代码[1]到目前为止#xff0c;我们使用了仅包含子标记的 RenderFragments#xff0c;然后在渲染组件时按… 原文链接https://blazor-university.com/templating-components-with-renderfragements/passing-data-to-a-renderfragement/将数据传递给 RenderFragment源代码[1]到目前为止我们使用了仅包含子标记的 RenderFragments然后在渲染组件时按原样包含子标记。除了标准的 RenderFragment 类之外还有一个通用的 RenderFragmentT 类可用于将数据传递到 RenderFragment。允许用户指定模板更改 TabControl 组件并在 ChildContent 参数下添加一个新的 TabTextTemplate 参数属性。[Parameter]
public RenderFragment ChildContent { get; set; }[Parameter]
public RenderFragmentTabPage TabTextTemplate { get; set; }然后更改 foreach 循环中的标记。我们需要做的是检查是否设置了 TabTextTemplate如果没有那么我们照常渲染如果已经设置那么我们执行 TabTextTemplate RenderFragment从 foreach 循环中传入 TabPage。CascadingValue Valuethisdiv classbtn-group rolegroupforeach (TabPage tabPage in Pages){button typebuttonclassbtn GetButtonClass(tabPage)onclick( () ActivatePage(tabPage) )if (TabTextTemplate ! null){TabTextTemplate(tabPage)}else{tabPage.Text}/button}/divChildContent
/CascadingValue要设置 TabTextTemplate我们需要在使用 TabControl 的页面中编辑标记。只需在 TabControl 元素内添加 TabTextTemplate 元素即可完成此操作只要将 TabPage 的标记呈现到 TabControl 的选项卡中该模板内的所有内容都将被视为要使用的 RenderFragment。TabControlTabTextTemplateHello/TabTextTemplateTabPage TextTab 1h1The first tab/h1/TabPageTabPage TextTab 2h1The second tab/h1/TabPageTabPage TextTab 3h1The third tab/h1/TabPage
/TabControl但是一旦您这样做编译器就会抱怨以下错误消息。组件“TabControl”内无法识别的子内容。组件“TabControl”通过以下顶级项目接受子内容“ChildContent”、“TabTextTemplate”。当您的组件中只有一个 RenderFragment 参数并且它被命名为 ChildContent 时Blazor 将假定每当我们使用该组件并在我们想要将其分配给 ChildContent 的开始和结束标记之间包含内容。但是一旦我们在消费者的标记中有两个 RenderFragmentBlazor 就不能假定所有内容都应该分配给 ChildContent 参数。此时组件的用户必须显式创建一个 ChildContent 元素来保存内容。为了明确意图可以将 ChildContent 属性重命名为 Tabs。TabControlTabTextTemplateHello/TabTextTemplateChildContentTabPage TextTab 1h1The first tab/h1/TabPageTabPage TextTab 2h1The second tab/h1/TabPageTabPage TextTab 3h1The third tab/h1/TabPage/ChildContent
/TabControl在 RenderFragment 中访问上下文到目前为止TabControl 组件将为每个 TabPage 的选项卡只显示文本“Hello”。我们需要的是访问正在呈现的 TabPage以便我们可以输出其 Text 属性的值。注意 TabControl 组件中 TabTextTemplate 的使用。if (TabTextTemplate ! null){TabTextTemplate(tabPage)}else{tabPage.Text}在 foreach 循环中创建了一个 HTML button并且在该按钮中前面的代码用于输出应显示给用户单击的内容。如果 TabTextTemplate 为空则呈现 tabPage.Text但如果 TabTextTemplate 不为空组件用户已指定模板则呈现模板并传入循环的当前 tabPage 以获取上下文。当使用 RenderFragmentT 类的通用版本时我们必须在渲染该片段时传递 T 的值。传递给片段的值可通过名为 context 的特殊变量获得。然后可以使用它来准确确定要渲染的内容。在我们的例子中我们希望使用一些额外的标记来呈现 TabPage.Text 属性。TabTextTemplateimg src/images/tab.png/ context.Text
/TabTextTemplate避免 context 名称冲突如果名称 context 与组件中的另一个标识符冲突则可以通过在 RenderFragment 上使用 Context 属性来指示 Blazor 逐个使用不同的名称。例如前面演示的 TabTextTemplate 标记可以改为如下编写。TabTextTemplate ContextTheTabimg src/images/tab.png/ TheTab.Text
/TabTextTemplate参考资料[1]源代码: https://github.com/mrpmorris/blazor-university/tree/master/src/TemplatedComponents/PassingDataToARenderFragment