如何在 Blazor 服务器端重定向到不同的路由

mik*_*eyy 14 c# blazor-server-side

在 Blazor 客户端中,可以使用以下方法实现重定向

using Microsoft.AspNetCore.Blazor.Browser.Services;
(...)
BrowserUriHelper.Instance.NavigateTo("/route")
Run Code Online (Sandbox Code Playgroud)

但是,这在 Blazor 服务器项目中不起作用,因为它会生成以下错误:

无法将“Microsoft.AspNetCore.Blazor.Server.Circuits.RemoteJSRuntime”类型的对象转换为“Microsoft.JSInterop.IJSInProcessRuntime”。

Blazor-Server 中的重定向如何?

Meh*_*ral 33

如果可以在razor页面触发,可以使用如下:

@page "/YourPageName"
@inject NavigationManager NavigationManager

<h1>xxx</h1>
.
.
.


@code {

    void MethodToTriggerUrl()
    {
        NavigationManager.NavigateTo("PageToRedirect");
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 当然,您可以放置​​ NavigationManager.NavigateTo("/PageToRedirect"); 而不是 MethodToTriggerUrl() (当然不会自动调用)。进入 protected override void OnInitialized(){} ,这将触发自动重定向。 (4认同)

mik*_*eyy 7

经过一段时间的试验,我发现在服务器端这是有效的:

using Microsoft.AspNetCore.Blazor.Services;
(...)
UriHelper.NavigateTo("/route");
Run Code Online (Sandbox Code Playgroud)

当然,看起来几乎相同,但确实有效(至少在 Blazor 0.8 中)

  • **UriHelper** 已在 Microsoft.AspNetCore.Components 命名空间中重命名为 **NavigationManager**:`@inject NavigationManager NavigationManager; NavigationManager.NavigateTo("路线", false);` (18认同)
  • 我有一个 Blazor 服务器应用程序,需要重定向到单独的 Blazor 组件库中的页面,而“NavigationManager”毫无用处。由于某种原因它没有被初始化,我无法从服务器项目中的页面导航到库项目中的页面。 (3认同)
  • 在 0.9 中,至少对我来说,我需要 @inject IUriHelper UriHelper (2认同)