目前我正在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>