【问题标题】:Shell routing issue on back button when passing page ID传递页面 ID 时后退按钮上的外壳路由问题
【发布时间】:2021-06-08 17:04:42
【问题描述】:

我仅在 Android 上收到以下错误(在 iOS 上正常)

Shell:无法向后导航:System.ArgumentException:匹配的不明确路由://D_FAULT_FlyoutItem12/IMPL_homepage/homepage/indexpage/indexpage

我在 AppShell 中这样声明页面

Routing.RegisterRoute("indexpage", typeof(Pages.Index));

因为页面的内容是动态的,所以我就这样导航到它

await Shell.Current.GoToAsync($"indexpage?indexid={clicked.ID}");

这在从列表转到索引页面时效果很好

但是,当我到达索引页面,然后通过在 AppShell 中注册的路由,但再次通过传入一个 ID,然后尝试返回时,我得到了错误

同样,该错误仅发生在 Android 上 - iOS 工作正常

【问题讨论】:

  • 最后一段描述不清楚,您能否通过重新编写和包含 AppShell.xaml 和 Appshell.xaml.cs 中有关页面结构/层次结构和路由定义的一些代码来澄清?
  • @Cfun 我以为我已经完成了?上面的 Routing 代码来自 AppShell.xaml.cs,GoToAsync 来自后面的页面,该页面使用注册的引用转到页面模板并使用 ID 加载内容。我想知道问题是否与“链接”这些事件有关?因为从列表页面转到 indexpage 时,“后退”按钮在两个平台上都可以正常工作,但是当使用该 ID 转到另一个页面时,就会出现错误
  • 我的意思是,与描述代码相比,最少的相关代码(不是一行,也不是一本书)使问题更清晰。

标签: c# xamarin xamarin.forms xamarin.forms.shell


【解决方案1】:

或任何将面临此问题并且也有此错误消息的人;

 System.ArgumentException: 'Ambiguous routes matched for: ...'

当您在 XAML 中(在 appshell 文件中)注册您的路由并且您还尝试在 C# 中的代码中注册您的路由时,会发生这种情况。仅使用 XAML 或 C# 注册一次您的路由,而不是同时使用两者。

修复您的错误:很可能您有 2 次页面注册...第一次在 AppShell.xaml.cs 文件中注册,第二次在 AppShell.xaml 中注册。

只需删除双寄存器,它应该可以工作。祝你好运

【讨论】:

  • 这就是我的答案。我在代码隐藏和 xaml 中注册并错过了。谢谢。
猜你喜欢
  • 2021-05-21
  • 2016-06-06
  • 1970-01-01
  • 2012-03-02
  • 2019-03-15
  • 2016-03-08
  • 2017-03-04
  • 2014-10-07
  • 2016-03-17
相关资源
最近更新 更多