- 首先,为了实现此功能,我们需要使用Blazor Server Side。在Project中启动ASP.NET Core Web服务器。
- 添加SessionStateMiddleware到Startup.cs。SessionStateMiddleware可以管理所有Blazor Server Side实例的会话状态。
public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
services.AddServerSideBlazor();
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
app.UseSessionStateMiddleware();
app.UseStaticFiles();
app.UseRouting();
app.UseEndpoints(endpoints =>
{
endpoints.MapBlazorHub();
endpoints.MapFallbackToPage("/_Host");
});
}
}
- 注入ISessionService到页面组件中并在ComponentBase OnInitialized方法中设置页面可编辑标志。选定标志的key是当前编辑的页面标识符
@inject ISessionService SessionService
@code {
protected override async Task OnInitializedAsync()
{
var pageId = "page1";
var isPageEditable = await SessionService.GetOrNullAsync(pageId);
if (!isPageEditable.HasValue || !isPageEditable.Value)
{
await SessionService.SetAsync(pageId, true);
}
else
{
// don't allow to edit if already being edited
}
}
}
- 客户端动态设置isPageEditable标志。标志的值根据页面的状态进行更改,以指示页面是否正在被编辑或已完成编辑。
@inject ISessionService sessionService
@code {
private bool isPageEditable;
protected override async Task OnInitializedAsync()
{
var pageId = "page1";
isPageEditable = await sessionService.GetOrCreateAsync(pageId, false);
}
private async Task TogglePageEditable()
{
// if page is not editable
if (!isPageEditable)
{
await sessionService.SetAsync("page1", true);
}
// if page is already being edited by another user
else if (