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

Shell.Current.GoToAsync()跳转异常:注册路由后页面无法切换

解决MAUI Shell路由跳转失败的问题

问题根源

你的代码存在几个关键问题导致跳转失效:

  1. 路由重复注册:AppShell的XAML里已经给<ShellContent>设置了Route="MainPage",后台代码又重复注册MainPage路由,引发冲突。
  2. 子路由注册逻辑错误:嵌套路由MainPage/MuseumListPage的注册方式不符合Shell路由的层级规则。
  3. 跳转路径写法错误://MainPage/MuseumListPage的绝对路径写法不匹配当前路由结构。

修复步骤

1. 移除重复的MainPage路由注册

修改AppShell后台代码,删掉重复的MainPage路由注册(XAML已完成该路由配置):

namespace MuseumFinder;

public partial class AppShell : Shell
{
    public AppShell()
    {
        InitializeComponent();

        // 删除这行重复注册
        // Routing.RegisterRoute(nameof(MainPage), typeof(MainPage));

        // 正确注册子路由
        Routing.RegisterRoute(nameof(MuseumListPage), typeof(MuseumListPage));
    }
}

2. 调整跳转路径写法

因为MainPage是当前Shell的活跃页面,直接用相对路径跳转即可:

private async void Button_Clicked(object sender, EventArgs e)
{        
    await Shell.Current.GoToAsync(nameof(MuseumListPage));
    // 若要使用绝对路径,确保路由匹配后可写成:"//MainPage/MuseumListPage"
}

3. 验证MuseumListPage的命名空间

如果MuseumListPage在MuseumFinder.Views命名空间下,需确保后台代码正确引用:

// 顶部添加命名空间引用
using MuseumFinder.Views;

// 注册路由时使用正确的类型
Routing.RegisterRoute(nameof(MuseumListPage), typeof(MuseumListPage));

4. 额外排查项

  • 查看调试输出窗口,MAUI会打印路由冲突、找不到目标页面的错误日志,快速定位问题。
  • 确认按钮的Clicked事件已正确绑定到Button_Clicked方法,XAML示例:
<Button Text="进入博物馆列表" Clicked="Button_Clicked"/>

内容的提问来源于stack exchange,提问作者John B

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 19:17:30