From 9ecfe08e2e184baabe78bfd55b86c244bfc56f7f Mon Sep 17 00:00:00 2001 From: TekH Date: Wed, 1 Jul 2026 23:10:39 +0200 Subject: [PATCH] Move session ID logic to OnAfterRenderAsync The session ID generation and redirection logic was moved from OnInitialized to OnAfterRenderAsync to address issues with NavigationException during SSR prerendering. OnInitialized is now intentionally left empty, and the new OnAfterRenderAsync method ensures the session ID is appended to the URL only after the first interactive render, when SignalR is connected and NavigateTo is safe. --- .../Components/Pages/EnvelopeSenderEditorPage.razor | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/EnvelopeGenerator.Server/EnvelopeGenerator.Server/Components/Pages/EnvelopeSenderEditorPage.razor b/EnvelopeGenerator.Server/EnvelopeGenerator.Server/Components/Pages/EnvelopeSenderEditorPage.razor index 1c211e79..02a5588f 100644 --- a/EnvelopeGenerator.Server/EnvelopeGenerator.Server/Components/Pages/EnvelopeSenderEditorPage.razor +++ b/EnvelopeGenerator.Server/EnvelopeGenerator.Server/Components/Pages/EnvelopeSenderEditorPage.razor @@ -348,8 +348,17 @@ protected override void OnInitialized() { - // If no session id exists yet, generate one and redirect so it sticks in the URL. - // This is the ONLY navigation that uses forceLoad; afterwards the page lives forever. + // Intentionally empty. + // esid redirect is done in OnAfterRenderAsync to avoid NavigationException + // during SSR prerendering, where NavigateTo throws by design. + } + + protected override async Task OnAfterRenderAsync(bool firstRender) + { + if (!firstRender) return; + + // Generate a session id on first interactive render and push it into the URL. + // At this point SignalR is connected and NavigateTo is safe. if (string.IsNullOrWhiteSpace(Esid)) { var sid = Guid.NewGuid().ToString("N");