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

.NET 8 Blazor Server中SupplyParameterFromQuery无法正常工作

解决Blazor Server中[SupplyParameterFromQuery]获取查询参数为null的问题

首先,你的代码遗漏了关键的[Parameter]特性——在Blazor组件中,[SupplyParameterFromQuery]需要和[Parameter]配合使用,路由系统才会将查询字符串的值绑定到该参数上。修改后的代码如下:

@page "/home"

<PageTitle>Home</PageTitle>

<p>
    <label>
         <input @bind="zipcode" />
    </label>
</p>

@code{
    [Parameter]
    [SupplyParameterFromQuery]
    public int? zipcode { get; set; }
}

如果上述方法仍不生效,或者你需要更灵活的查询参数处理方式,可以通过以下两种手动获取的方法:

方法一:使用NavigationManager和QueryHelpers解析

注入NavigationManager,借助QueryHelpers工具类解析查询字符串:

@page "/home"
@inject NavigationManager NavManager
@using Microsoft.AspNetCore.WebUtilities

<PageTitle>Home</PageTitle>

<p>
    <label>
         <input @bind="zipcode" />
    </label>
</p>

@code{
    private int? zipcode;

    protected override void OnInitialized()
    {
        var uri = NavManager.ToAbsoluteUri(NavManager.Uri);
        var queryParams = QueryHelpers.ParseQuery(uri.Query);
        
        if (queryParams.TryGetValue("zipcode", out var zipValue) && int.TryParse(zipValue, out var zip))
        {
            zipcode = zip;
        }
    }
}

方法二:使用HttpUtility解析(需引用System.Web)

如果你习惯使用传统的HttpUtility,可以这样实现:

@page "/home"
@inject NavigationManager NavManager
@using System.Web

<PageTitle>Home</PageTitle>

<p>
    <label>
         <input @bind="zipcode" />
    </label>
</p>

@code{
    private int? zipcode;

    protected override void OnInitialized()
    {
        var uri = new Uri(NavManager.Uri);
        var queryParams = HttpUtility.ParseQueryString(uri.Query);
        
        if (int.TryParse(queryParams["zipcode"], out var zip))
        {
            zipcode = zip;
        }
    }
}

注意:使用System.Web的方式需要在项目中添加对该程序集的引用,不过在现代.NET项目中更推荐使用QueryHelpers的方式。

内容的提问来源于stack exchange,提问作者Bill Kindig

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 20:02:42