asp.net-core - Blazor 在组件之间传递 List<T>

标签 asp.net-core binding components blazor data-sharing

我的代码有问题,我的页面布局如下。
我正在与数据库通信以获取主要内容的数据。是List<SomeClass>我从数据库中得到的。现在我想要相同的List<SomeClass>可用于 RightContent。这两个组件都是自定义的并且具有不同的布局,但可以共享相同的 List 而不是两次进行相同的调用。 (序列是 MainContent Initialized() 方法首先被调用)
我创建了一个具有以下属性的服务类 AppDataService。还添加到 IServiceCollection services在启动中。

public List<SomeClass> sharedListOfSomeClass = new List<SomeClass>();
在 MainContent 中,我正在注入(inject) AppDataService 并为 sharedListOfSomeClass 分配数据库值。
现在,如果我在正确的内容中注入(inject) AppDataService 并尝试访问 sharedListOfSomeClass 我将其设为空。
我知道我在这里缺少绑定(bind),因为两个组件在 html 方面都不同,并且无法将其绑定(bind)到任何 html 标签。
任何人都可以帮助我实现这一目标。我想对这两个组件的数据库进行一次调用。
enter image description here

最佳答案

如果你想拥有应用程序的一些全局状态并在不同组件之间共享,最合理的方法是创建一个 State将包含全局状态数据的类

public class State
{
    public List<SomeClass> SomeClassObjectsCollection { get; set; } = new List<SomeClass>();
}

在您的 Startup (或 Program 如果您使用 Blazor wasm)您应该添加 State对象作为单例
services.AddSingleton<State>()

在每个页面上,您需要访问状态(或者甚至在 _Imports 如果您想经常访问它)添加
@inject State State

之后在任何页面上您都可以引用 State.SomeClassObjectsCollection并获得相同的数据。

关键是添加一个状态作为单例。如果您将添加为 transient 或什至作用域,则依赖容器将创建 State 的新实例.

关于asp.net-core - Blazor 在组件之间传递 List<T>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61153706/

相关文章:

.Net Core 主机进程 Windows 2016 IIS 中的高 CPU 使用率在 Asp.Net Core 2.2 应用程序中

Delphi:在属性编辑器中浏览组件

c# - .NET 4.5 和 .NET Core - 身份验证旧版

Asp.NET Core 后台服务应用

binding - 组织 Guice 绑定(bind)配置的解决方案

javascript - jQuery 的更改方法在这里做什么(如果有的话)?

c# - 按下按钮后设置文本框焦点

java - 我必须使用哪个 swing 组件在 java 中的同一字段中应用不同样式的文本

apache-flex - Flex 3 - 在使用 AS3 时,我必须在设置其属性之前添加组件吗?

c# - 不可为空的字符串类型,如何与 Asp.Net Core 选项一起使用