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

.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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 02:50:30