查询支持
最小限的使用方法¶
以下是最小限必要的内容:
- 准备一个带有
[BlazorPath]
属性的类。在定义类时,需要使用partial
属性。 - 在该类中定义一个
const string
类型的常量作为成员。 - 为成员添加
[Query<QueryClass>]
属性。
在生成URL构建函数的过程中,会根据 [Query<QueryClass>]
的定义生成支持查询的函数。
WebPaths.cs | |
---|---|
1 2 3 4 5 6 7 8 |
|
注意!
QueryRecord
类必须写在 .cs
文件中。
由于 SourceGenerator 的限制,不能写在 .razor
文件中。
建议:明确参数的初始值
建议为每个参数指定默认值或将其设为可空。(需要考虑到查询参数未指定时的情况)
生成的代码
Auto Generated Code | |
---|---|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
|
工作原理¶
为带有 [Query<QueryClass>]
属性的成员生成以下函数:
Auto Generated Code | |
---|---|
1 2 3 4 5 6 |
|
从上面的生成代码可以看出,QueryRecord
类的每个属性都被展开为查询参数。
在生成此函数时,BlazorPathHelper 内部执行以下操作:
- 检查是否附加了
[Page<QueryClass>]
属性。 - 如果指定了,则提取
QueryClass
中定义的属性。- 成员也可以使用,但不推荐。
- 对每个属性调用
ToEscapedStrings
函数生成查询参数。- 例如,上述情况下,会生成
"query=hello"
,"page=0"
,"opt=true"
这样的字符串。
- 例如,上述情况下,会生成
- 将生成的查询参数传递给
BuildQuery
函数生成查询字符串。- 上述情况下,会生成
"?query=hello&page=0&opt=true"
这样的字符串。 - 例如
opt=null
时,会变成"?query=hello&page=0"
,opt
参数不会输出。
- 上述情况下,会生成
不支持嵌套属性
如上定义,实际上并不是恢复整个类,而是提取属性。
因此,目前不支持嵌套属性。
更改查询名称¶
指定 [Query<QueryRecord>]
属性时,查询名称直接使用 QueryRecord
的属性名。
如果想更改查询名称,请添加 [QueryName("shortName")]
属性。
WebPaths.cs | |
---|---|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
|
支持的类型¶
QueryClass
的属性可以定义如下:
常规类型¶
类定义示例 | 输出的查询URL示例 |
---|---|
record QueryClass(int val1) |
"/?val1=5" |
record QueryClass(bool? flg1) |
"/?flg1=true", "/" |
除此之外,只要实现了 ToString()
且 Blazor 能够恢复的类型,基本上都支持。
数组¶
类定义示例 | 输出的查询URL示例 |
---|---|
record QueryClass(string[] arr) |
"/?arr=foo&arr=bar&arr=buz" |
除了 string[]
,int[]
和 bool[]
等也支持。
由于 Blazor 不支持 IEnumerable
和 List
,因此不支持这些类型。