Blazor Razor页面登录注册功能报错CS0120、CS0117求助
错误原因分析
- CS0120:错误地将
NavigationManager作为静态类调用,实际上它是依赖注入的服务实例,必须通过注入对象访问成员。 - CS0117:缺少必要的命名空间引用,导致
LocationChangedEventArgs类型无法被编译器识别。
修正后的完整代码
@inject NavigationManager Navigation @using Microsoft.AspNetCore.Components <div class="top-row container-fluid"> <a class="navbar" href="">WebsiteProject</a> <input type="checkbox" title="Navigation menu" class="navbar-toggler" data-bs-toggle="collapse" data-bs-target="#navbar" /> </div> <div class="nav-scrollable collapse navbar-collapse" id="navbar"> <nav class=""> <div class="nav-item px-3"> <NavLink class="nav-link" href="" Match="NavLinkMatch.All"> Home </NavLink> </div> <div class="nav-item px-3"> <NavLink class="nav-link" href="Blog"> Blog </NavLink> </div> </nav> </div> @code { private string? currentUrl; protected override void OnInitialized() { currentUrl = Navigation.ToBaseRelativePath(Navigation.Url); Navigation.LocationChanged += OnLocationChanged; } private void OnLocationChanged(object? sender, LocationChangedEventArgs e) { currentUrl = Navigation.ToBaseRelativePath(e.Location); StateHasChanged(); } public void Dispose() { Navigation.LocationChanged -= OnLocationChanged; } }
核心修正点
- 替换静态调用为实例调用:将所有
NavigationManager.XX的写法改为注入的实例Navigation.XX,比如Navigation.ToBaseRelativePath、Navigation.Url,直接解决CS0120错误。 - 添加命名空间引用:在文件顶部添加
@using Microsoft.AspNetCore.Components,让编译器识别LocationChangedEventArgs类型,消除CS0117错误。
后续Identity整合建议
如果要添加登录/注销导航项,可额外注入AuthenticationStateProvider,通过GetAuthenticationStateAsync()获取用户状态,动态显示登录、注册或注销按钮。
内容的提问来源于stack exchange,提问作者Jax Harris
相关产品推荐
相关产品推荐

