.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
相关产品推荐
相关产品推荐

