Index
最小限的使用方法
以下是最小限必要的内容:
- 准备一个带有
[BlazorPath]
属性的类。在此过程中,类定义需要使用 partial
属性。
- 在该类中定义一个
const string
类型的常量。
- 作为成员的属性,添加
[Page<PageComponent>]
。
BlazorPathHelper 会自动扫描满足上述条件的类定义,并生成 URL 构建函数。
WebPaths.cs |
---|
1
2
3
4
5
6
7
8
9
10
11
12 | using BlazorPathHelper;
using Microsoft.AspNetCore.Components;
[BlazorPath]
public partial class WebPaths
{
[Page<Home>]
public const string Index = "/";
}
// 各组件的定义(实际上在各组件中描述)
public partial class Home : ComponentBase;
|
生成的代码
Auto Generated Code |
---|
| // <auto-generated />
[Route("/")]
public partial class Home;
|
结果是,Home
组件会自动获得与 @page
属性相同的效果。
注意!
最后需要删除原本定义的 @page
属性。
参数与查询支持
如果 URL 中包含参数定义,则会自动添加 [Parameter]
属性。
WebPaths.cs |
---|
| using BlazorPathHelper;
[BlazorPath]
public partial class WebPaths
{
[Page<Counter>]
public const string CounterWithState = "/counter/{count:int}";
}
|
生成的代码
Auto Generated Code |
---|
| // <auto-generated />
[Route("/counter/{count:int}")]
public partial class Counter
{
[Parameter]
public int Count { get; set; }
}
|
同样,通过添加 Query<QueryRecord>
属性,可以自动添加 [SupplyParameterFromQuery]
属性。
WebPaths.cs |
---|
| using BlazorPathHelper;
[BlazorPath]
public partial class WebPaths
{
[Query<QueryRecord>, Page<Counter2>]
public const string CounterWithQuery = "/counter/query";
}
public record QueryRecord(string query = "hello", int page = 0, bool? opt = null);
|
生成的代码
Auto Generated Code |
---|
1
2
3
4
5
6
7
8
9
10
11
12
13 | // <auto-generated />
[Route("/counter/query")]
public partial class Counter2
{
[SupplyParameterFromQuery]
public string Query { get; set; }
[SupplyParameterFromQuery]
public int Page { get; set; }
[SupplyParameterFromQuery]
public bool? Opt { get; set; }
}
|
也支持查询名称的缩写。
WebPaths.cs |
---|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 | using BlazorPathHelper;
[BlazorPath]
public partial class WebPaths
{
[Query<QueryRecord>, Page<Counter3>]
public const string CounterWithQuery = "/counter/query";
}
public record QueryRecord
{
[SupplyParameterFromQuery(Name = "q")]
public string Query { get; init; } = "hello";
[SupplyParameterFromQuery(Name = "p")]
public int Page { get; init; } = 0;
[SupplyParameterFromQuery(Name = "o")]
public bool? Opt { get; init; }
}
|
生成的代码
Auto Generated Code |
---|
1
2
3
4
5
6
7
8
9
10
11
12
13 | // <auto-generated />
[Route("/counter/query")]
public partial class Counter3
{
[SupplyParameterFromQuery(Name = "q")]
public string Query { get; set; }
[SupplyParameterFromQuery(Name = "p")]
public int Page { get; set; }
[SupplyParameterFromQuery(Name = "o")]
public bool? Opt { get; set; }
}
|
工作原理
TODO