如何将对象从一个页面组件传递到 .NET Blazor 应用程序中的另一个页面组件?

How to pass an object from one page component to another page component in a .NET Blazor app?

我有一个 .NET Blazor Server 应用程序,需要将对象从一个组件传递到另一个组件。这两个组件都是页面,这意味着它们具有带路由的 @page 指令。我知道如何使用级联值在常规 Blazor 组件之间传递参数,但这不适用于页面组件。我也知道如何在端点路由中传递参数。但是,我想传递具有多个属性的对象而不是字符串或 int,但我不确定如何最好地完成此操作。

是否可以将对象作为端点路由参数传递?如果不是,在 Razor 组件上下文中实现此目的的好方法是什么?

使用 DI 服务。创建一个 class 来保存您的对象。将其添加为程序中的作用域服务。尽管 @inject.

在任何组件中使用它(页面只是具有 page 属性的组件)

使用依赖注入可能会为您解决这个问题。

示例:

  1. 创建一个名为“ApplicationService”的class
  2. 在 class 中创建一个名为“IApplicationService”的接口

你可以有这样的东西

public interface IApplicationService
{
     public Task MsgBox(string value);
}
  1. 在“ApplicationService.cs”文件中的ApplicationServiceclass中,继续实现上面的接口成员。

你可以有这样的东西:

public async Task MsgBox(string value)
{
   await _JSRuntime.InvokeAsync<string>("alert", value);
}
  1. 在 program.cs class 中,您现在需要注册我们刚刚创建的“服务”。

你可以有这样的东西

builder.Services.AddTransient<IApplicationService, ApplicationService>();
builder.Services.AddScoped<ApplicationService>();
  1. 在您的 _Imports.razor 中,您可以注入 class 以便页面可以访问它:

    @inject ApplicationService MainAppService;

  2. 现在在你的剃须刀组件中你应该能够做这样的事情:

    await MainAppService.MsgBox("这是一个消息框");

这在我的 WASM blazor 应用程序中有效,希望它能对服务器端的事情有所启发