.net-core - Razor 组件:我可以在主布局中创建多个(上游渲染)部分吗?
问题描述
目前我正在开发 Blazor Web Assembly 中的一个项目。在这里,我想创建一个单独的块/部分,我可以在其中从不同的 Blazor 页面呈现不同的引导模式。我可以通过创建一个新的布局组件类,添加一个新的 RenderFragment 属性并从它继承来实现它吗?
Update1:是否可以创建多个部分(如在 asp.net/mvc razor 中)?
解决方案
在寻找我的问题的解决方案的过程中,我发现 Blazor 页面不会向上游渲染,但我们可以使用Steve Sanderson 先生的方法实现上游渲染。
但是我对我的场景使用了另一种方法,如下所示:
创建一个类并作为作用域注入:
public interface IUIBlocks
{
RenderFragment? ModalsBlock { get; }
event EventHandler<OnUpdateEventArgs> OnValueUpdate;
void SetModalsBlock(RenderFragment blockBody);
}
public class UIBlocks : IValueUpdator, IUIBlocks
{
public RenderFragment? ModalsBlock { get; private set; }
public event EventHandler<OnUpdateEventArgs> OnValueUpdate;
public void SetModalsBlock(RenderFragment blockBody)
{
ModalsBlock = blockBody;
OnValueUpdate?.Invoke(this, new OnUpdateEventArgs
{
CallerType = GetType(),
CallingMethod = nameof(SetModalsBlock),
CallingObject = this
});
}
}
在 Program.cs 中:
builder.Services.AddScoped<IUIBlocks, UIBlocks>();
在 MainLayout.razor 中注入 UIBlocks 实例并将 ModalsBlock 放置在我想要放置的位置
@inject IUIBlocks BlocksService
...
</div>
@BlocksService.ModalsBlock
...
现在,创建了一个 Razor 组件作为 ModalsBlock:
@inject IUIBlocks Blocks
@code {
[Parameter]
public RenderFragment ChildContent { get; set; }
protected override Task OnAfterRenderAsync(bool firstRender)
{
Blocks.SetModalsBlock(ChildContent);
if (firstRender)
{
}
return base.OnAfterRenderAsync(firstRender);
}
}
现在我可以在任何 Razor 组件中使用它,如下所示:
<_ModalsBlock>
<div class="modal fade>
...
</div>
</_ModalsBlock>
推荐阅读
- python - 仅执行大型 jupyter 笔记本中的一些单元格
- rest - LinkedIn API :: 如何获取不记名访问令牌
- python - 键盘 HID 报告
- react-native - 无法将道具传递给外部常量?
- c++ - 如何在系统上使用并行 std::for_each
不见了? - c# - 找不到文件?C# - 获取资源
- python - 根据另一个列表中的值获取列表值
- python-3.x - 如何在异常/错误后继续在 Python 中继续执行程序
- html - 是否可以在不移动元素的情况下更改 html 上的索引顺序?
- ios - 来自本地通知附件 (UNNotificationAttachment) 的图像有时不显示