@@ -42,6 +42,8 @@ static readonly IReadOnlyDictionary<string, object> _emptyParametersDictionary
4242
4343    private  bool  _onNavigateCalled ; 
4444
45+     internal  const  string  AllowRenderDuringPendingNavigationKey  =  "__BlazorAllowRenderDuringPendingNavigation" ; 
46+ 
4547    [ Inject ]  private  NavigationManager  NavigationManager  {  get ;  set ;  } 
4648
4749    [ Inject ]  private  INavigationInterception  NavigationInterception  {  get ;  set ;  } 
@@ -220,11 +222,14 @@ private void ClearRouteCaches()
220222
221223    internal  virtual  void  Refresh ( bool  isNavigationIntercepted ) 
222224    { 
225+         var  providerRouteData  =  RoutingStateProvider ? . RouteData ; 
226+         var  allowRenderDuringPendingNavigation  =  TryConsumeAllowRenderDuringPendingNavigation ( providerRouteData ) ; 
227+ 
223228        // If an `OnNavigateAsync` task is currently in progress, then wait 
224229        // for it to complete before rendering. Note: because _previousOnNavigateTask 
225230        // is initialized to a CompletedTask on initialization, this will still 
226231        // allow first-render to complete successfully. 
227-         if  ( _previousOnNavigateTask . Status  !=  TaskStatus . RanToCompletion ) 
232+         if  ( _previousOnNavigateTask . Status  !=  TaskStatus . RanToCompletion   &&   ! allowRenderDuringPendingNavigation ) 
228233        { 
229234            if  ( Navigating  !=  null ) 
230235            { 
@@ -239,7 +244,7 @@ internal virtual void Refresh(bool isNavigationIntercepted)
239244        ComponentsActivityHandle  activityHandle ; 
240245
241246        // In order to avoid routing twice we check for RouteData 
242-         if  ( RoutingStateProvider ? . RouteData  is  {  }  endpointRouteData ) 
247+         if  ( providerRouteData  is  {  }  endpointRouteData ) 
243248        { 
244249            activityHandle  =  RecordDiagnostics ( endpointRouteData . PageType . FullName ,  endpointRouteData . Template ) ; 
245250
@@ -312,6 +317,17 @@ internal virtual void Refresh(bool isNavigationIntercepted)
312317        _renderHandle . ComponentActivitySource ? . StopNavigateActivity ( activityHandle ,  null ) ; 
313318    } 
314319
320+     private  static bool  TryConsumeAllowRenderDuringPendingNavigation ( RouteData ?  routeData ) 
321+     { 
322+         if  ( routeData ? . RouteValues . TryGetValue ( AllowRenderDuringPendingNavigationKey ,  out  var  value )  ==  true  &&  value  is  true ) 
323+         { 
324+             ( routeData . RouteValues  as  IDictionary < string ,  object ? > ) ? . Remove ( AllowRenderDuringPendingNavigationKey ) ; 
325+             return  true ; 
326+         } 
327+ 
328+         return  false ; 
329+     } 
330+ 
315331    private  ComponentsActivityHandle  RecordDiagnostics ( string  componentType ,  string  template ) 
316332    { 
317333        ComponentsActivityHandle  activityHandle  =  default ; 
0 commit comments