Blazor - 可以在后面的代码中使用 NavigateTo 吗?
Blazor - Possible to NavigateTo in code behind?
是否可以在代码隐藏中使用导航管理器进行导航?我有一个全局助手 class,如果全局函数失败,我需要将其重定向到特定页面。这可能吗?如果您能够在代码隐藏的 NavagationManager 上创建一个实例,我不太明白。或者如果这是可能的,我应该使用依赖注入来调用 naigationmanager 吗?
谢谢!
Is it possible to navigateto with the navigationmanager in code behind?
I have a global helper class
当您将此 Helper class 设为 Scoped 或 Transient 服务(即可注入)时,您就可以轻松地使用构造函数注入,问题就解决了。
private NavigationManager _navigationManager;
public MyHelperService(NavigationManager navigationManager)
{
_navigationManager = navigationManager;
}
然后当然是 Startup.ConfigureServices()
services.AddTransient<MyHelperService>();
实际导航应该可以正常工作。
这个答案扩展了 Henk Holterman 的伟大答案,但包括一个完整的例子,因为服务一开始让我感到困惑,我希望将来发现这个的人有一个完整的例子。
这是我的 Index.razor
页面
@page "/"
<TypeScriptTest.Components.MyComponent></TypeScriptTest.Components.MyComponent>
这是我的 MyComponent.razor:
<button @onclick="Test">
Test
</button>
MyComponent.razor.cs:(这也可以在 MyComponent.razor 的 @Code 块中,但在顶部使用 @inject HelperService)
public partial class MyComponent
{
[Inject] HelperService HelperService { get; set; }
public void Test()
{
HelperService.ChangePage();
}
}
ConfigureServices
在 Startup.cs
内:
public void ConfigureServices(IServiceCollection services)
{
services.AddRazorPages();
services.AddServerSideBlazor();
services.AddSingleton<WeatherForecastService>();
services.AddTransient<HelperService>();
}
最后,HelperService.cs
public class HelperService
{
private NavigationManager _navigationManager;
public HelperService(NavigationManager navigationManager)
{
_navigationManager = navigationManager;
}
public void ChangePage()
{
_navigationManager.NavigateTo("/test");
}
}
使用此方法,您将 NavigationManager
注入到您的 Helper 的构造函数中,然后将您的 Helper 变成一个服务,然后您可以将该服务注入到任何组件中。
是否可以在代码隐藏中使用导航管理器进行导航?我有一个全局助手 class,如果全局函数失败,我需要将其重定向到特定页面。这可能吗?如果您能够在代码隐藏的 NavagationManager 上创建一个实例,我不太明白。或者如果这是可能的,我应该使用依赖注入来调用 naigationmanager 吗?
谢谢!
Is it possible to navigateto with the navigationmanager in code behind?
I have a global helper class
当您将此 Helper class 设为 Scoped 或 Transient 服务(即可注入)时,您就可以轻松地使用构造函数注入,问题就解决了。
private NavigationManager _navigationManager;
public MyHelperService(NavigationManager navigationManager)
{
_navigationManager = navigationManager;
}
然后当然是 Startup.ConfigureServices()
services.AddTransient<MyHelperService>();
实际导航应该可以正常工作。
这个答案扩展了 Henk Holterman 的伟大答案,但包括一个完整的例子,因为服务一开始让我感到困惑,我希望将来发现这个的人有一个完整的例子。
这是我的 Index.razor
页面
@page "/"
<TypeScriptTest.Components.MyComponent></TypeScriptTest.Components.MyComponent>
这是我的 MyComponent.razor:
<button @onclick="Test">
Test
</button>
MyComponent.razor.cs:(这也可以在 MyComponent.razor 的 @Code 块中,但在顶部使用 @inject HelperService)
public partial class MyComponent
{
[Inject] HelperService HelperService { get; set; }
public void Test()
{
HelperService.ChangePage();
}
}
ConfigureServices
在 Startup.cs
内:
public void ConfigureServices(IServiceCollection services)
{
services.AddRazorPages();
services.AddServerSideBlazor();
services.AddSingleton<WeatherForecastService>();
services.AddTransient<HelperService>();
}
最后,HelperService.cs
public class HelperService
{
private NavigationManager _navigationManager;
public HelperService(NavigationManager navigationManager)
{
_navigationManager = navigationManager;
}
public void ChangePage()
{
_navigationManager.NavigateTo("/test");
}
}
使用此方法,您将 NavigationManager
注入到您的 Helper 的构造函数中,然后将您的 Helper 变成一个服务,然后您可以将该服务注入到任何组件中。