c# - Blazor:在子组件中显示父组件的内容
问题描述
我正在为 Blazor 中的组件继承而苦苦挣扎。我想创建一个
MyComponentBase.razor
包含基本布局的基本组件。MyComponent.razor
继承自组件MyComponentBase.razor
并包含内容。
我的问题是 Blazor 应用程序中的页面仅显示MyComponent.razor
组件的内容,而不显示组合内容。我找不到任何解释如何做到这一点的例子。任何人都可以帮忙吗?
MyComponentBase.razor
@inherits ComponentBase
<div>
<p>My Title</p>
<p>My SubTitle</p>
@ChildContent
</div>
@code
{
[Parameter]
public RenderFragment ChildContent { get; set; }
}
MyComponent.razor
@inherits MyComponentBase
<p>My Content</p>
MyPage.razor
@page "/page"
<MyComponent/>
预期结果
<div>
<p>My Title</p>
<p>My SubTitle</p>
<p>My Content</p>
</div>
实际结果
<p>My Content</p>
解决方案
继承时,您会覆盖 RenderTree。这就是为什么MyComponent
只显示它的文本。
您也不需要ComponentBase
在.razor
文件中继承。你有两个(好的)选择。布局或模板。
Layout
(又名MyComponentBase
)
@inherits LayoutComponentBase
<div>
<p>My Title</p>
<p>My SubTitle</p>
@Body
</div>
然后像下面这样使用它:
MyComponent
@layout MyComponentBaseLayout
<p>My Content</p>
您几乎拥有的模板方法。
您只需更改MyComponent
为
<MyComponentBase>
<p>My Content</p>
</MyComponentBase>
推荐阅读
- css - Bootstrap 4下拉菜单出现在父级的右侧
- django - Django:如何在 API 视图中模拟一个类
- c# - Linq - 如何查询字典
- typescript - 如何为 some()、filter()、forEach() 禁用 @typescript-eslint/explicit-function-return-type?
- outlook-web-addins - 如果扩展名是大写,Outlook OfficeJS API 无法解析内容类型
- ruby-on-rails - 尝试在多态关联上创建项目时键不正确
- javascript - 为什么 Django 没有检测到我在 javascript fetch POST 请求中发送的数据?
- java - 使用 Spring 组件的内部组件属性
- animation - 在 SwiftUI 中链接动画
- awk - 如何使用 sed 在“ssh-keygen -if”的输出中隔离 linux 指纹