.NET 8 Blazor Handling Data With Auto/Global Interactivity – Blazor

by
Alexei Petrov
asp.net-core-8 blazor blazor-server-side blazor-webassembly server-side-rendering

Quick Fix: Design your data pipeline to run both directly through EF and via an API pipeline. Create an interface for data broker and implement it differently for server and WASM modes using dependency injection. This way, your UI and core domain code remain the same, and you can switch between EF and API calls seamlessly.

The Problem:

In a .NET 8 Blazor Web App with the ‘Auto’ interactive render mode and ‘Global’ interactivity location, components initially server rendered with query results from a database disappear upon rerendering as WebAssembly (WASM). Even server-side components encounter ‘page not found’ errors. This issue persists across both the WASM and server projects. Despite the global auto-switching, there seems to be no built-in way to handle data retention during the transition, leading to confusion about the purpose and correct usage of this configuration.

The Solutions:

Solution 1: Using an Abstracted Data Broker Interface

This solution focuses on designing a data pipeline that works seamlessly in both server and WASM modes, abstracting the data access layer from the UI components.

  1. IDataBroker Interface:

    • Create an IDataBroker interface that defines the data access methods your components will use. This interface should be independent of any specific data access technology.
  2. Server-Side Implementation:

    • In the server-side project, implement the IDataBroker interface using Entity Framework (EF) or a similar technology to access the database directly.
  3. WASM Implementation:

    • In the WASM project, implement the IDataBroker interface using an API client to make HTTP requests to the server-side API controllers.
  4. Component Interaction:

    • In your components, inject the IDataBroker interface through dependency injection. This allows your components to access data without worrying about the underlying implementation.
  5. Data Handling During Mode Switching:

    • When the component switches from server-side rendering to WASM rendering, the IDataBroker implementation will automatically switch from EF to the API client.
    • This ensures that your components continue to have access to the data they need, regardless of the rendering mode.
  6. Data Pipeline Design:

    • Ensure that your data requests, such as collection filtering and sorting, are serializable to allow seamless data transfer between the server and WASM.

This approach provides a clean separation between the UI components and the data access layer, making your application more maintainable and scalable.

Q&A

What is the purpose of the global interactivity location handler?

Automatic switching from server to WASM rendering for every component.

Why do server components become unusable when rerendering as WASM?

Lack of a built-in mechanism to handle data when switching from server to WASM.

How to retain data when auto switching from server to WASM?

Design your data pipeline to run both directly through EF and via an API pipeline.

Video Explanation:

The following video, titled "Intro to Blazor in .NET 8 - SSR, Stream Rendering, Auto, and more ...", provides additional insights and in-depth exploration related to the topics discussed in this post.

Play video

In .NET 8, Blazor has become a full-featured web framework that is modular and adaptable to your needs over time. In this video, we are ...