Intermittent ObjectDisposedException on quick navigation in Syncfusion 32.x (.NET 10, Blazor Server) – JS interop runs after component disposal
Summary
After upgrading our application from .NET 9 + Syncfusion 31.2.x to .NET 10 + Syncfusion 32.1.x, our testers and end users started encountering intermittent ObjectDisposedException errors during fast page navigation and sometimes during initial page load.
Due to the frequency and severity of the issue, we were forced to roll back the Syncfusion version.
The highest stable version for us is 31.2.18.
Starting from 32.1.19 and all later 32.x versions, the issue reproduces.
The problem affects multiple Syncfusion components (e.g. Scheduler, Grid, Carousel, etc.). We isolated and reproduced the issue using SfSchedule in a minimal demo project.
Environment
-
Framework: .NET 10
-
Hosting model: Blazor Server
-
Affected Syncfusion versions:
-
❌ 32.1.19 and later
-
✅ 31.2.18 and earlier (no issue)
-
Observed Behavior
During quick navigation, Syncfusion components may still execute JS interop callbacks even after the component has already been disposed, resulting in an ObjectDisposedException involving DotNetObjectReference.
This appears timing-sensitive and may require multiple attempts to reproduce consistently.
Example error:
System.ObjectDisposedException: Cannot access a disposed object.
Object name: 'Microsoft.JSInterop.DotNetObjectReference`1'
Minimal Reproduction
Demo project: SfDemo
Repro steps:
-
dotnet runinSfDemo -
Navigate to
http://localhost:5268/schedule-demo -
The page renders
SfScheduleand immediately navigates away on first render (to simulate real-world quick navigation).
Note: This repro does not rely on any async data call; it reproduces even with static in-memory data.
The issue is intermittent/timing-sensitive and may require repeated tries (fast navigation back and forth) to trigger.
Actual Result
Unhandled exception (sample stack):
System.ObjectDisposedException: Cannot access a disposed object.
Object name: 'Microsoft.JSInterop.DotNetObjectReference`1[[System.Object, System.Private.CoreLib, Version=10.0.0.0]]'
at Microsoft.JSInterop.JSRuntime.TrackObjectReference[TValue](DotNetObjectReference`1 dotNetObjectReference)
...
at Syncfusion.Blazor.Schedule.SfSchedule`1.OnAfterScriptRendered()
at Syncfusion.Blazor.SfBaseComponent.OnAfterRenderAsync(Boolean firstRender)
at Syncfusion.Blazor.Schedule.SfSchedule`1.OnAfterRenderAsync(Boolean firstRender)
Expected Result
Navigating away during component initialization should not throw exceptions.
JS interop callbacks should be skipped/cancelled if the component has already been disposed.
Additional Note
We are observing similar OnAfterScriptRendered-related ObjectDisposedException errors in multiple Syncfusion components, not limited to SfSchedule. This may indicate a broader lifecycle/disposal-related issue introduced in Syncfusion 32.x.
Attachment: SfDemo_141594fc.zip
Hi Kadir
Boylu,
Greetings from Syncfusion Support.
Your reported problem is considered a bug. The fix for this defect will be included in our upcoming weekly patch release, which is expected to be rolled out by January 27, 2026. You can track the status of the fix at the following link:
Feedback link: An exception occurs in the Blazor Schedule component when quickly navigating between pages in Blazor | Feedback Portal
Disclaimer: Inclusion of this solution in the weekly release may change due to other factors including but not limited to QA checks and works reprioritization.
Regards,
Vijay
Hi Kadir Boylu,
Thanks for your patience.
Attachment: SfDemo_141594fc_e487d7e3.zip
Hi,
once in a while (can't say exactly under which circumstances) I get this error in the latest version 33.2.4
Is it possible that the issue still exist in some scenarios? I always see it in the SfTooltip Context (maybe because i wrap a lot of components in these tooltips).
System.ObjectDisposedException: Cannot access a disposed object.
Object name: 'Microsoft.JSInterop.DotNetObjectReference`1[[System.Object, ...]]'.
at Microsoft.JSInterop.DotNetObjectReference`1.ThrowIfDisposed()
at Microsoft.JSInterop.JSRuntime.TrackObjectReference[TValue](DotNetObjectReference`1)
at Microsoft.JSInterop.Infrastructure.DotNetObjectReferenceJsonConverter`1.Write(...)
...
at Microsoft.JSInterop.JSRuntimeExtensions.InvokeVoidAsync(...)
at Syncfusion.Blazor.Internal.SfBaseUtils.InvokeMethod(...)
at Syncfusion.Blazor.SfBaseComponent.InvokeMethod(...)
at Syncfusion.Blazor.Popups.SfTooltip.OnAfterScriptRendered()
at Syncfusion.Blazor.SfBaseComponent.OnAfterRenderAsync(Boolean firstRender)
at Syncfusion.Blazor.Popups.SfTooltip.OnAfterRenderAsync(Boolean firstRender)
Thank you for bringing this issue to our attention. We have thoroughly reviewed your latest report and attempted to replicate the error in latest version, by quickly navigating between pages and enabling the schedule quick info template. However, we were unable to reproduce the issue in our environment.
Regards,
Vijayakumar R
Attachment: ScheduleDemo_c087cb73.zip
Hi Syncfusion Team,
We have finally been able to upgrade and retest this issue with Syncfusion Blazor version 33.2.10.
Unfortunately, the problem does not appear to be fully resolved.
As we mentioned in the original report, this does not seem to be limited to SfSchedule. In our current tests, we are observing similar disposal / lifecycle / JS interop related errors in multiple components, including Schedule, Stepper, and Grid. We are still continuing our regression tests, so it is possible that the same class of issue may appear in other Syncfusion components as well.
Also, the issue is not limited only to quick navigation or fast page transitions. We have also observed similar errors when closing dialogs or when components are removed from the page during normal UI flows.
With DetailedErrors enabled, we are seeing the following error:
System.ArgumentException: There is no tracked object with id '3'. Perhaps the DotNetObjectReference instance was already disposed. (Parameter 'dotNetObjectId')
at Microsoft.JSInterop.JSRuntime.GetObjectReference(Int64 dotNetObjectId)
at Microsoft.JSInterop.Infrastructure.DotNetDispatcher.BeginInvokeDotNet(...)
With DetailedErrors disabled, the errors appear as failed JSInvokable callbacks, for example:
- TriggerCreatedEvent
- SuppressTooltip
- StepChangedHandler
- ColumnWidthChanged
- LastRowBorder
We are also seeing a Scheduler-side JavaScript error during teardown/render timing:
Microsoft.JSInterop.JSException: Cannot read properties of null (reading 'offsetTop')
TypeError: Cannot read properties of null (reading 'offsetTop')
at e.renderAppointments (...syncfusion-blazor.min.js...)
at t.onDataReady (...)
at e.dataReady (...)
at Syncfusion.Blazor.Schedule.SfSchedule`1.OnDataReady()
at Syncfusion.Blazor.Schedule.Internal.MonthEventTable`1.OnAfterRenderAsync(Boolean firstRender)
These errors do not always block the page from continuing to work, but seeing repeated JS interop / disposed object related errors in the browser console is concerning for us, especially because we did not experience this behavior before upgrading from the previously stable Syncfusion version.
From the stack traces, it looks like JavaScript callbacks may still be trying to invoke .NET instance methods or access DOM elements after the related component has already been disposed or removed from the page.
Could you please clarify the root cause of these errors in version 33.2.10?
Also, could you confirm whether the fix delivered in 32.1.25 only covered a specific Scheduler scenario, or whether it was intended to address the broader stale JS callback / disposed DotNetObjectReference lifecycle issue across Syncfusion Blazor components?
Current environment:
- .NET 10
- Blazor Server
- Syncfusion Blazor 33.2.10
- Issue is intermittent and timing-sensitive
- Observed during quick navigation, fast page transitions, dialog closing, and component removal scenarios
We are continuing our tests and can provide additional component-specific traces as we encounter them.
Regards,
Kadir
System.ArgumentException: There is no tracked object with id '3'. Perhaps the DotNetObjectReference instance was already disposed. |
Microsoft.JSInterop.JSException: Cannot read properties of null (reading 'offsetTop') at MonthEventTable`1.OnAfterRenderAsync(Boolean firstRender) |
- Scheduler initialized with CurrentView="View.Week" (without two-way binding)
- User switches to Month view via toolbar
- User performs date navigation (Prev/Next)
- Error occurs
<!-- One-way binding (may cause issue) --> <SfSchedule CurrentView="View.Week" ...> <!-- Two-way binding (recommended) --> <SfSchedule @bind-CurrentView="currentView" ...> |
- Appointment count (approximate number)
- Exact repro steps: User actions and timing (e.g., "navigate away within 2 seconds of page load")
- Browser and OS version
Attachment: SfDemo_141594fc_73ab7bfd.zip
Hi Vijayakumar Rajasekar,
This repro uses two-way binding for CurrentView:
<SfSchedule @bind-CurrentView="@CurrentView" ...>
The Scheduler issue still occurs with two-way binding enabled.
Environment:
- .NET 10
- Blazor Server
- Syncfusion Blazor 33.2.10
Scheduler repro steps:
1. Open /scheduler-public-api-repro
2. Wait for the scheduler to load
3. Quickly switch between Month and Week views
4. Observe browser console / server logs
Although this may look like an edge case in the sample because the actions are performed very quickly, we are seeing this more easily in our production environment during real customer workflows. Our concern is not only that the error appears in the console, but that in some cases it can leave the user in a broken UI state and force them to refresh the page or reconnect the Blazor circuit. At minimum, these lifecycle / JS interop timing errors should be handled gracefully without breaking the active screen or circuit connection.
In addition to the Scheduler repro, the same sample project also includes a Grid-related repro page. I will include this in the video as well.
Regards,
Kadir
Attachment: repro_8c51f1b6.zip
Hi Kadir Boylu,
Greetings from Syncfusion Support.
Your reported problem is considered a bug. The fix for this defect will be included in our upcoming weekly patch release, which is expected to be rolled out by July 8, 2026. You can track the status of the fix at the following link:
Feedback link: An exception occurs in the Blazor Schedule component when quickly navigating between views in Blazor | Feedback Portal
Disclaimer: Inclusion of this solution in the weekly release may change due to other factors including but not limited to QA checks and works reprioritization.
Regards,
Vijay
Hi Kadir Boylu,
We are glad to announce that our weekly release (V34.1.30) has been rolled out successfully. The fix for the issue has been included in our weekly release(34.1.30) or latest version. Upgrade to the latest version to resolve the issue.
Release notes: https://blazor.syncfusion.com/documentation/release-notes/34.1.30?type=all#schedule
Feedback link: https://www.syncfusion.com/feedback/74658/an-exception-occurs-in-the-blazor-schedule-component-when-quickly-navigating
Root Cause: When navigating between calendar views (Month ↔ Vertical/Week/Day), DOM elements specific to each view don't exist in other views. The code assumed these elements were always present and tried to access properties like .offsetTop, .offsetHeight, and .style without null checks, causing "Cannot read properties of null" exceptions.
Regards,
Vijay
- 9 Replies
- 4 Participants
-
KB Kadir Boylu
- Jan 12, 2026 02:16 PM UTC
- Jul 16, 2026 05:39 AM UTC