我有一个。net Blazor服务器应用程序,需要将对象从一个组件传递到另一个组件。这两个组件都是页面,这意味着它们有带路由的@page指令。我知道如何使用级联值在常规Blazor组件之间传递参数,但这不适用于页面组件。我还知道如何在端点路由中传递参数。然而,我想传递一个具有多个属性的对象,而不是字符串或int,我不确定如何最好地实现这一点。
是否可以传递一个对象作为端点路由参数?如果没有,在Razor组件上下文中,有什么好方法来完成这个任务呢?
使用依赖注入可能会解决这个问题。
的例子:
- 创建一个名为"applicationservice"的类
- 在该类中创建一个名为"IApplicationService"的接口
可以是这样的
public interface IApplicationService
{
public Task MsgBox(string value);
}
- 在ApplicationService类中的"ApplicationService.cs"文件,继续并实现上面的接口成员
你可以这样写:
public async Task MsgBox(string value)
{
await _JSRuntime.InvokeAsync<string>("alert", value);
}
- 在program.cs类中,您现在需要注册该"服务"。我们刚刚创建了。
可以是这样的
builder.Services.AddTransient<IApplicationService, ApplicationService>();
builder.Services.AddScoped<ApplicationService>();
你可以注入这个类,这样页面就可以访问它了:
现在在你的razor组件中,你应该可以这样做:
await MainAppService.MsgBox("这是一个消息框");
这在我的WASM blazor应用程序中工作,希望它能给服务器端带来一些启示🚀
使用DI服务。创建一个类来保存对象。将其作为程序中的作用域服务添加。在任何组件中使用它(页面只是带有页面属性的组件),尽管@inject
.