我的代码有问题,我的页面布局如下。
我正在与数据库通信以获取主要内容的数据。是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 标签。
任何人都可以帮助我实现这一目标。我想对这两个组件的数据库进行一次调用。
最佳答案
如果你想拥有应用程序的一些全局状态并在不同组件之间共享,最合理的方法是创建一个 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/