Blazor 中 [SupplyParameterFromQuery]
用于自动将 URL 查询参数绑定到组件参数,无需手动解析 NavigationManager
或 QueryHelpers
。 它在 .NET 6+ 的 Blazor Server 和 WebAssembly(需启用路由参数支持)中可用,适用于
@page组件或使用
Router渲染的组件。
基础用法:声明参数并添加特性
在
@page组件中,直接为
[Parameter]属性加上
[SupplyParameterFromQuery]即可: 参数名默认匹配查询键名(大小写不敏感),例如
?id=123→ 绑定到
public int Id { get; set; }
支持类型转换:int、
bool、
DateTime、
enum等内置可转换类型会自动解析 若查询参数缺失或格式错误,参数值取该类型的默认值(如
int为
0,
bool为
false)
指定自定义查询键名
用
Name参数显式指定 URL 中的查询键,避免命名冲突或适配已有 URL 规范:
[SupplyParameterFromQuery(Name = "user_id")] public int UserId { get; set; } → 匹配 ?user_id=456
Name区分大小写,但实际 URL 查询参数本身不区分大小写,框架会做兼容匹配
处理可空类型与缺失值
若需区分“参数未提供”和“参数为默认值”,应使用可空类型 +
[Parameter] bool IsSet { get; set; } 配合 [SupplyParameterFromQuery]:
public int? Count { get; set; } → ?count=或
?count=abc时为
null;
?count=7时为
7字符串类型天然可空,
?name=会绑定为
string.Empty,
?name(无等号)则为
null不建议依赖
default(T)判断是否传参,优先用可空类型或额外布尔标记
注意事项与常见问题
该特性仅在组件首次渲染或 URL 查询参数变化时触发绑定,且要求组件参与路由(即被
Router渲染): 非
@page组件(如普通
.razor子组件)需确保由路由组件传入,否则不会生效 WebAssembly 项目需确认已启用查询参数支持(.NET 6+ 默认开启;旧版本需检查
Program.cs中是否调用
builder.Services.AddComponentsWeb()) 绑定失败时无异常抛出,建议配合日志或前端验证辅助调试 不支持复杂对象自动反序列化,如需解析 JSON 查询值,仍需手动处理
基本上就这些。用好
[SupplyParameterFromQuery]能让页面级参数传递更简洁,但别忘了它只解决“读取”,状态同步和深层导航逻辑还得靠
NavigationManager配合。
