.NET 8 Blazor 通过自动/全局交互处理数据

问题描述 投票:0回答:1

我一直在熟悉 .NET 8 Blazor Web App 结构,并尝试理解和使用“自动”交互渲染模式以及“全局”交互位置。创建新解决方案时,有两个项目:server 和 wasm。使用自动/全局交互设置,组件似乎总是首先由服务器渲染,然后切换到 wasm 渲染。我真的很喜欢这个概念,但是我在整个过程中处理数据时遇到问题。

当尝试从 wasm 项目上的组件查询数据库时,该组件最初是服务器渲染的,并且查询结果显示在 wasm 组件上。但是,一旦服务器连接关闭并且组件重新渲染为 wasm,该组件将无法访问服务器数据库,查询结果也会消失。类似地,当尝试从“服务器项目”上的组件查询数据库时,该组件最初是服务器渲染的,查询结果显示在服务器组件上。但是,一旦服务器连接关闭并且组件尝试重新呈现为 wasm,就会出现“抱歉,找不到页面”错误。 我看过很多示例视频,其中用户强调了这种自动渲染切换。但是,他们都使用每个页面/组件交互位置来设置项目,并手动设置这些页面以保持活动的服务器连接。考虑到这一点,全局交互位置处理程序的意义何在?

如我的示例中所述,该解决方案在重新呈现为 wasm 时丢弃我的服务器组件。如果服务器端组件基本上不可用,为什么还要使用这个“全局”设置?
  • 如果此配置的目的是在每个组件上全局自动从服务器切换到 wasm,那么为什么在重新渲染为 wasm 时没有内置方法来处理查询结果或类似数据?
  • 查询数据库时,从服务器自动切换到wasm时,如何正确保留这些数据?
  • 虽然我喜欢全局自动开关的概念,但我觉得我缺少理解如何正确使用它的关键部分。

asp.net blazor rendering blazor-server-side blazor-webassembly
1个回答
2
投票

考虑您的数据库示例。

在您的应用程序中,您的组件应该与使用

IDataBroker

接口获取数据的视图提供程序进行通信。

在服务器模式下,DI 

IDataBroker

连接到 EF。在 WASM 模式下,DI

IDataBroker
对服务器上的控制器进行 API 调用。 UI和Core域代码是相同的。它只是通过 DI 提供的
IDataBroker
的不同实现进行接口。
因此,您需要设计数据管道来运行两者:

直接通过EF
  1. 通过 API 管道
  2. 即您的请求,例如集合过滤和排序,需要可序列化。

Net8 中没有任何灵丹妙药可以将组件的

dbContext

调用连接到 WASM 中的数据库。当你的页面组件切换模式时,它需要切换

IDataBroker
实现。
    

© www.soinside.com 2019 - 2024. All rights reserved.