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 throwing when triggered before with lazy loading finished: #24211.

With rendering blocked, 404 re-execution mechanism is not able to render the contents of 404 page. We have to implement logic to inform Router that request re-execution happened and prevent rendering blocking in that case. To do it, we're embedding a flag in RouteData.

Description

  • Prevents blocking rendering for routers with OnNavigateAsync in progress if Refresh is triggered by re-execution.
  • Adds a test for the issue.
  • Added __BlazorAllowRenderDuringPendingNavigation flag to RouteData. In order to avoid regressing Lazy loading might encounter issues if host page rerenders during loading #24211, communication between endpoint renderer and router is necessary. Endpoint renderer has the information if request was re-executed. Router needs this information to decide if it's dealing with a Refresh that is supposed to wait for OnNavigateAsync completion and block rendering until it's finished (to assure e.g. that assemblies that would be lazy loaded in that OnNavigateAsync are not missing during rendering). Or if it's dealing with Refresh after re-execution when we expect 404 page render and cannot block the rendering.
  • Added a test for Don't render route component if OnNavigateAsync task in-progress #24225 change that checks what the corresponding issue was reporting - if rendering happens after or before OnNavigateAsync task finishes. That test reflects the issue in more details than the one originally covering the fix and that does not fail when the regression really happens.

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.

@ilonatommy ilonatommy added the * NO MERGE * Do not merge this PR as long as this label is present. label Oct 21, 2025
@ilonatommy ilonatommy removed the * NO MERGE * Do not merge this PR as long as this label is present. label Oct 22, 2025
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