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() =>