首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

除非刷新页面,否则NavigationManager.Uri根本不会更新。如何在Blazor Server中获得真正的当前URI?

在Blazor Server中,可以通过使用NavigationManager的Uri属性来获取当前的URI。但是,由于Blazor Server使用了SignalR来实现与服务器的通信,导致在页面上进行导航时,NavigationManager.Uri属性不会立即更新。

要获得真正的当前URI,可以使用以下方法之一:

  1. 使用NavigationManager的LocationChanged事件:订阅NavigationManager的LocationChanged事件,该事件在URI更改时触发。在事件处理程序中,可以通过NavigationManager.Uri属性获取最新的URI。
代码语言:txt
复制
@inject NavigationManager NavigationManager

@code {
    protected override void OnInitialized()
    {
        NavigationManager.LocationChanged += OnLocationChanged;
    }

    private void OnLocationChanged(object sender, LocationChangedEventArgs e)
    {
        var currentUri = NavigationManager.Uri;
        // 处理当前URI
    }

    public void Dispose()
    {
        NavigationManager.LocationChanged -= OnLocationChanged;
    }
}
  1. 使用Blazor的JSInterop功能:通过JavaScript与浏览器进行交互,获取真正的当前URI。可以创建一个JavaScript函数,通过调用window.location.href来获取当前URI,并通过Blazor的JSInterop功能在C#中调用该函数。

在wwwroot目录下创建一个名为"scripts.js"的JavaScript文件,包含以下代码:

代码语言:txt
复制
window.getCurrentUri = function () {
    return window.location.href;
};

然后,在Blazor组件中使用JSInterop调用该函数:

代码语言:txt
复制
@inject IJSRuntime JSRuntime

@code {
    private string currentUri;

    protected override async Task OnInitializedAsync()
    {
        currentUri = await JSRuntime.InvokeAsync<string>("getCurrentUri");
        // 处理当前URI
    }
}

这样就可以通过JSInterop调用JavaScript函数获取真正的当前URI。

无论使用哪种方法,都可以获得真正的当前URI,以便在Blazor Server应用程序中进行进一步处理。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

没有搜到相关的沙龙

领券