Razor组件:我可以在主布局中创建多个(上游渲染)部分吗



目前我正在Blazor Web Assembly中进行一个项目。在这里,我想创建一个sperate块/部分,在那里我可以从不同的Blazor页面呈现不同的引导模式。我可以通过创建一个新的布局组件类、添加一个新RenderFragment属性并从中继承来实现吗?

更新1:是否可以创建多个部分(如asp.net/mvc剃须刀(?

在寻找问题解决方案的过程中,我发现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
});
}
}

在程序.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>

相关内容

  • 没有找到相关文章

最新更新