.NET MAUI Shell导航传字典参数报错:无法将字典转为bool
问题解决:MAUI Shell导航传参时的类型转换错误
你遇到的错误是因为调用的GoToAsync重载方法第二个参数为bool类型(用于控制导航动画开关),但你传入了Dictionary<string, string>,导致类型不匹配。以下是两种可行的解决方法:
方案一:使用QueryParameters包装参数(推荐)
GoToAsync提供了接受QueryParameters类型参数的重载,直接用它包装字典即可,无需手动拼接查询字符串:
await Shell.Current.GoToAsync(nameof(DetailPage), new QueryParameters { ["Name"] = s.RecipeName, ["Ingredients"] = s.Ingredients, ["Steps"] = s.Steps });
注意:页面名称后不需要加?,QueryParameters会自动处理参数的拼接与编码。
方案二:手动拼接查询字符串
如果偏好直接拼接URL的方式,可以将字典转换为符合格式的查询字符串,同时注意对参数值做URL编码避免特殊字符问题:
var queryParams = new Dictionary<string, string> { ["Name"] = s.RecipeName, ["Ingredients"] = s.Ingredients, ["Steps"] = s.Steps }; var queryString = string.Join("&", queryParams.Select(kv => $"{Uri.EscapeDataString(kv.Key)}={Uri.EscapeDataString(kv.Value)}")); await Shell.Current.GoToAsync($"{nameof(DetailPage)}?{queryString}");
补充:接收参数的方式
在DetailPage中,可通过[QueryProperty]特性绑定导航参数:
[QueryProperty(nameof(RecipeName), "Name")] [QueryProperty(nameof(Ingredients), "Ingredients")] [QueryProperty(nameof(Steps), "Steps")] public partial class DetailPage : ContentPage { public string RecipeName { get; set; } public string Ingredients { get; set; } public string Steps { get; set; } // 页面其他逻辑代码 }
内容的提问来源于stack exchange,提问作者Florian
相关产品推荐
相关产品推荐

