.NET MAUI页面间传参报错:无法解析路由问题求助
.NET MAUI Shell导航传参报错:
System.ArgumentException: unable to figure out route for: PdfViewer?pdfName=EN 10305-2 问题原因
错误核心是导航参数包含空格,未进行URL编码。Shell导航的URL遵循标准URL规则,空格属于非法字符,直接拼接会导致路由解析器无法正确识别参数,进而抛出路由找不到的异常。
解决步骤
1. 对导航参数进行URL编码
修改AnaSayfaViewModel中的PerformNavigation方法,使用Uri.EscapeDataString对包含空格的参数进行编码:
private async void PerformNavigation(string GetName) { // 对参数进行URL编码,处理空格等特殊字符 var encodedPdfName = Uri.EscapeDataString(GetName); await Shell.Current.GoToAsync($"{nameof(PdfViewer)}?pdfName={encodedPdfName}"); }
2. 确保参数正确接收并触发PDF加载逻辑
你的PdfViewerViewModel已使用[QueryProperty]标记,可利用CommunityToolkit.Mvvm的ObservableProperty特性添加部分方法,响应属性变化:
namespace borkatalogYeni { [QueryProperty(nameof(PdfName), "pdfName")] public partial class PdfViewerViewModel : ObservableObject { [ObservableProperty] string pdfName; // 当PdfName属性变化时自动调用此方法 partial void OnPdfNameChanged(string value) { // 此处可添加PDF加载逻辑,例如通知View加载对应文件 } } }
3. 在PdfViewer页面中响应参数变化
在PdfViewer.xaml.cs中监听ViewModel的属性变化,实现PDF加载:
public partial class PdfViewer : ContentPage { private readonly PdfViewerViewModel _viewModel; public PdfViewer(PdfViewerViewModel vm) { InitializeComponent(); BindingContext = _viewModel = vm; // 监听PdfName属性变化,加载PDF _viewModel.PropertyChanged += ViewModel_PropertyChanged; } private void ViewModel_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e) { if (e.PropertyName == nameof(PdfViewerViewModel.PdfName) && !string.IsNullOrEmpty(_viewModel.PdfName)) { webViewPdf.Source = $"{_viewModel.PdfName}.pdf"; this.Title = _viewModel.PdfName; } } protected override void OnDisappearing() { base.OnDisappearing(); // 取消事件订阅,避免内存泄漏 _viewModel.PropertyChanged -= ViewModel_PropertyChanged; } }
额外检查
确保PdfViewer页面已在Shell中正确注册路由(你提到不传参可正常跳转,此步骤大概率已完成):
- 在
AppShell.xaml中添加:<ShellContent Route="PdfViewer" ContentTemplate="{DataTemplate local:PdfViewer}" /> - 或在代码中注册:
Routing.RegisterRoute(nameof(PdfViewer), typeof(PdfViewer));
内容的提问来源于stack exchange,提问作者caneraltuner
相关产品推荐
相关产品推荐

