diff --git a/src/Components/Components/src/Routing/Router.cs b/src/Components/Components/src/Routing/Router.cs index 92b88c8251fc..809aa16f1a1e 100644 --- a/src/Components/Components/src/Routing/Router.cs +++ b/src/Components/Components/src/Routing/Router.cs @@ -136,8 +136,10 @@ public async Task SetParametersAsync(ParameterView parameters) _onNavigateCalled = true; await RunOnNavigateAsync(NavigationManager.ToBaseRelativePath(_locationAbsolute), isNavigationIntercepted: false); } - - Refresh(isNavigationIntercepted: false); + else + { + Refresh(isNavigationIntercepted: false); + } } /// diff --git a/src/Components/Components/test/Routing/RouterTest.cs b/src/Components/Components/test/Routing/RouterTest.cs index ba6cebcb3e6e..b413b286f2a4 100644 --- a/src/Components/Components/test/Routing/RouterTest.cs +++ b/src/Components/Components/test/Routing/RouterTest.cs @@ -199,6 +199,31 @@ await _renderer.Dispatcher.InvokeAsync(() => Assert.Equal($"Rendering route matching {typeof(MultiSegmentRouteComponent)}", renderedFrame.TextContent); } + [Fact] + public async Task SetParametersAsyncRefreshesOnce() + { + //Arrange + var parameters = new Dictionary + { + { nameof(Router.AppAssembly), typeof(RouterTest).Assembly }, + { nameof(Router.NotFound), (RenderFragment)(builder => { }) }, + }; + + var refreshCalled = 0; + _renderer.OnUpdateDisplay = (renderBatch) => + { + refreshCalled += 1; + return; + }; + + // Act + await _renderer.Dispatcher.InvokeAsync(() => + _router.SetParametersAsync(ParameterView.FromDictionary(parameters))); + + //Assert + Assert.Equal(1, refreshCalled); + } + internal class TestNavigationManager : NavigationManager { public TestNavigationManager() =>