You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET MAUI视图往返导航出现异常Shell状态问题求助

解决.NET 9 MAUI Shell路由异常路径与导航错误问题

针对你遇到的Shell路由路径异常(出现多个////)、导航报错及绝对路径挂起问题,可从以下几个方向排查修复:

1. 规范路由注册与Shell结构

  • 确保路由注册在AppShell构造函数中完成,且先执行InitializeComponent()再注册路由:
    public AppShell()
    {
        InitializeComponent();
        Routing.RegisterRoute(nameof(LoginPage), typeof(LoginPage));
        Routing.RegisterRoute(nameof(ProfilePage), typeof(ProfilePage));
        Routing.RegisterRoute(nameof(HistoryPage), typeof(HistoryPage));
    }
    
  • 避免重复注册同一路由(比如同时在MauiProgram和AppShell中注册),重复注册可能导致路由解析逻辑混乱。

2. 修正导航路径格式

  • 全局路由导航:使用绝对路径时,正确格式为//路由名称,但需注意.NET 9中部分版本存在绝对路径挂起的已知问题,可尝试改用/路由名称(单斜杠)作为全局导航路径;
  • 相对路径导航:从子页面返回或同级跳转时,需匹配Shell的路由层级。比如从history返回profile,若两者是同级全局路由,应使用//profile而非..(..仅适用于嵌套路由的父级跳转);
  • 避免栈叠加导致路径异常:重复跳转到同一页面时,使用replace参数替换当前栈条目,防止路径无限叠加:
    await Shell.Current.GoToAsync("profile", true);
    

3. 排查.NET 9版本bug

.NET 9作为较新的SDK版本,Shell路由模块存在部分已知问题(如路径拼接错误、绝对路径挂起),建议:

  • 升级到.NET 9的最新补丁版本(通过Visual Studio的SDK管理器更新);
  • 若问题仍存在,可临时回退到.NET 8验证是否为版本兼容性问题。

4. 重置Shell导航栈

当出现异常路由状态时,可通过重置导航栈恢复正常:

await Shell.Current.GoToAsync("//login", true);

此操作会清空现有导航栈,跳转到指定页面,避免异常路径累积。

内容的提问来源于stack exchange,提问作者s.napier

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 21:07:07