Skip to content

Conversation

ilonatommy
Copy link
Member

@ilonatommy ilonatommy commented Oct 14, 2025

Do not prevent rendering for router that has OnNavigateAsync when navigation already started.

In #24225 we blocked rendering for router that has OnNavigateAsync that is typically used for lazy loading actions. The reason was that rendering was interfering with lazy loading logic in state: #24211.

With rendering blocked, 404 re-execution mechanism is not able to render the contents of 404 page. We can differentiate between a situation when SSR match or re-execution happened from a situation when we're performing purely client navigation. In the former case, RoutingStateProvider?.RouteData is populated by EndpointHtmlProvider during SSR.

Description

  • Prevent blocking rendering for routers with OnNavigateAsync if Refresh is not triggered by the client.
  • Adds a test for the issue.

Fixes #63933

@ilonatommy ilonatommy self-assigned this Oct 14, 2025
@ilonatommy ilonatommy added the area-blazor Includes: Blazor, Razor Components label Oct 14, 2025
@ilonatommy ilonatommy marked this pull request as ready for review October 15, 2025 10:08
@ilonatommy ilonatommy requested a review from a team as a code owner October 15, 2025 10:08
@ilonatommy ilonatommy requested review from Copilot and removed request for a team October 15, 2025 10:08
Copy link
Contributor

@Copilot Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull Request Overview

This PR fixes an issue where Blazor 404 re-execution was not working properly when the Router component had an OnNavigateAsync handler. The fix allows rendering to proceed during 404 re-execution scenarios while still preventing it during client-side navigation when lazy loading is in progress.

Key changes:

  • Modified the Router component to differentiate between server-side rendering (SSR) scenarios and client-side navigation
  • Updated the navigation blocking logic to check if route data is available from SSR before blocking rendering
  • Added comprehensive test coverage for the 404 re-execution scenario with OnNavigateAsync

Reviewed Changes

Copilot reviewed 3 out of 3 changed files in this pull request and generated 2 comments.

File Description
src/Components/Components/src/Routing/Router.cs Updated navigation logic to allow rendering during SSR/re-execution while maintaining blocking for client navigation
src/Components/test/testassets/Components.TestServer/RazorComponents/App.razor Added test infrastructure with configurable OnNavigateAsync handler and query parameter support
src/Components/test/E2ETest/ServerRenderingTests/NoInteractivityTest.cs Added end-to-end test to verify 404 re-execution works with OnNavigateAsync

@ilonatommy
Copy link
Member Author

Failures of UserStoreTest are not connected, they happen across different PRs and should be quarantined.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area-blazor Includes: Blazor, Razor Components

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Blazor Router NotFoundPage incompatible with OnNavigateAsync

1 participant