提问人:Steffan Pallesen 提问时间:11/17/2023 更新时间:11/18/2023 访问量:199
Blazor Web App (.NET 8):如何在 WebAssembly 呈现的页面上使用服务器呈现的组件?
Blazor Web App (.NET 8): How to use a server rendered component, on a WebAssembly rendered page?
问:
假设我在 Blazor Web 应用 (.NET 8) 中有一个 WebAssembly 呈现的页面:
@page "/counter"
@rendermode InteractiveWebAssembly
<PageTitle>Counter</PageTitle>
<h1>Counter</h1>
<p role="status">Current count: @currentCount</p>
<button class="btn btn-primary" @onclick="IncrementCount">Click me</button>
<ServerSideComponent></ServerSideComponent>
@code {
private int currentCount = 0;
private void IncrementCount()
{
currentCount++;
}
}
我有一个带有服务器端渲染的 Razor 组件:
@rendermode InteractiveServer
<p role="status">Current count: @currentCount</p>
<button class="btn btn-primary" @onclick="IncrementCount">Click me</button>
@code {
private int currentCount = 0;
private void IncrementCount()
{
currentCount++;
}
}
有没有办法在 WebAssembly 呈现的页面上呈现服务器端呈现 blazor 组件?我希望页面在 WebAssembly 中呈现,并且组件在服务器中呈现。
当我尝试这样做时,我得到这个异常:
Microsoft.AspNetCore.Components.WebAssembly.Rendering.WebAssemblyRenderer[100] 未经处理的异常呈现组件:无法创建类型为“BlazorApp4.Client.ServerSideComponent”的组件,因为其 渲染模式 “Microsoft.AspNetCore.Components.Web.InteractiveServerRenderMode”是 WebAssembly 渲染不支持。System.NotSupportedException: 无法创建以下类型的组件 “BlazorApp4.Client.ServerSideComponent”,因为它的呈现模式 “Microsoft.AspNetCore.Components.Web.InteractiveServerRenderMode”是 WebAssembly 渲染不支持。
答:
如果使用的是 rendermode InteractiveWebAssembly,则不能使用服务器上定义的组件。最好的方法是让页面具有其默认行为(未指定渲染模式,因此它将使用服务器端渲染),然后从该页面调用两个组件。
然后,您可以定义 compoennts 渲染模式,如下所示:
@page "/counter"
<PageTitle>Counter</PageTitle>
<ClientSideComponent @rendermode=WebAssemblyInteractive />
<ServerSideComponent @rendermode=ServerInteractive />
@code {
}
请注意,ServerSideCompoenent 还必须位于客户端项目中,并且无法访问任何服务器资源(如数据库)。如果需要访问服务器资源,则必须在服务器端项目中创建一个控制器,并从客户端组件将其作为 Web API 请求调用。
评论