【问题标题】:Where does code inside of @code runs in blazor server-side?@code 内的代码在 blazor 服务器端运行在哪里?
【发布时间】:2020-09-22 12:32:36
【问题描述】:
这可能是一个愚蠢的问题。但我试图阅读更多关于 Blazor 的信息,但我总是对 @code 感到困惑。据我了解,当您在客户端 blazor 中使用 @code 时,一切都在客户端浏览器上本地运行。
所以我有几个问题:
- 当您使用 blazor 服务器端时,
@code 块内的代码是在服务器上运行还是仍然在客户端上运行?
-
@code 块内的代码是否本质上转换为 blazor 中的 JS?
- 是否可以在服务器端 Blazor 应用程序的客户端上本地运行 C# 代码?我需要它的一个案例:用户在线协作编辑文档的应用程序(如谷歌文档)。我想检测服务器上的更改并告诉每个使用该文档的客户端接受新的更改。
【问题讨论】:
标签:
blazor
blazor-server-side
【解决方案1】:
@code 块在 Blazor 服务器应用程序和 Blazor WebAssembly 应用程序中用于分隔组件的视图(混合 C# + Html 标记)部分及其代码部分。这两个部分都被编译成一个 ComponentBase 类。
当您使用 blazor 服务器端时,@code 块内的代码是在服务器上运行还是仍然在客户端上运行?
您的 Blazor 服务器应用仅在服务器上运行。它发出 Html 差异,通过 SignalR 连接传递给客户端浏览器,客户端 SignalR 代码 (JavaScript) 使用传递给它的 Html 差异更新 DOM 元素。
请注意,与 Blazor 服务器应用程序的客户端(浏览器)的每次交互都是在服务器上执行的。因此,如果您单击一个按钮,则附加到该按钮的单击事件的事件处理程序将在服务器上执行。
@code 块内的代码是否本质上转换为 blazor 中的 JS?
没有。它是 C# 中的代码,并且仍然如此。如果您的应用位于 Blazor Server App 中,它会再次在服务器上执行。如果它在 Blazor WebAssembly 应用程序中,它将在浏览器上以 C#、.Net 程序集执行。它甚至没有编译成 wasm。它是浏览器上的 .Net。但是,执行这些 .Net 程序集的单声道运行时被编译为 WebAssembly。
是否可以在服务器端 Blazor 应用的客户端本地运行 C# 代码?
从我上面写的很明显,情况并非如此。同样,Blazor 服务器应用程序在服务器上执行。您的用例不是问题,可以轻松解决...
希望这会有所帮助...