Blazor University (23)路由 —— 路由参数

Posted dotNET跨平台

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Blazor University (23)路由 —— 路由参数相关的知识,希望对你有一定的参考价值。

原文链接:https://blazor-university.com/routing/route-parameters/

路由参数

源代码[1]

到目前为止,我们已经了解了如何将静态 URL 链接到 Blazor 组件。静态 URL 只对静态内容有用,如果我们希望同一个组件根据 URL 中的信息(例如客户 ID)呈现不同的视图,那么我们需要使用路由参数。

在添加组件的 @page 声明时,通过将其名称包装在一对 大括号 中来在 URL 中定义路由参数。

@page "/customer/CustomerId

捕获参数值

捕获参数的值就像添加具有相同名称的属性并用 [Parameter] 属性装饰它一样简单。

@page "/"
@page "/customer/CustomerId"

<h1>
  Customer:
  @if (string.IsNullOrEmpty(CustomerId))
  
    @:None
  
  else
  
    @CustomerId
  
</h1>
<h3>Select a customer</h3>
<ul>
  <li><a href="/customer/Microsoft">Microsoft</a></li>
  <li><a href="/customer/Google">Google</a></li>
  <li><a href="/customer/IBM">IBM</a></li>
</ul>

@code 
  [Parameter]
  public string CustomerId  get; set; 

请注意,当导航到解析为与当前页面相同类型的组件的新 URL 时,组件不会在导航之前被销毁,并且不会执行 OnInitialized* 生命周期方法。导航被简单地视为对组件参数的更改。

路由参数约束

源代码[2]

除了能够指定包含参数的 URL 模板外,还可以确保 Blazor 仅在参数值满足特定条件时才将 URL 与组件匹配。

例如,在采购订单编号始终为整数的应用程序中,我们希望 URL 中的参数与我们的组件相匹配,以便仅当 OrderNumber 的 URL 值实际上是一个数字时才显示采购订单。

要为参数定义约束,它以冒号后缀,然后是约束类型。例如 :int 只会匹配在正确的位置包含一个有效的整数值的 URL。

@page "/"
@page "/purchase-order/OrderNumber:int"

<h1>
  Order number:
  @if (!OrderNumber.HasValue)
  
    @:None
  
  else
  
    @OrderNumber
  
</h1>
<h3>Select a purchase order</h3>
<ul>
  <li><a href="/purchase-order/1/">Order 1</a></li>
  <li><a href="/purchase-order/2/">Order 2</a></li>
  <li><a href="/purchase-order/42/">Order 42</a></li>
</ul>

@code 
  [Parameter]
  public int? OrderNumber  get; set; 

约束类型

约束.NET 类型有效值无效值
:boolSystem.Booleantrue
false
1
Hello
:datetimeSystem.DateTime2001-01-01
02-29-2000
29-02-2000
:decimalSystem.Decimal2.34
0.234
2,34
૦.૨૩૪
:doubleSystem.Double2.34
 0.234
2,34
૦.૨૩૪
:floatSystem.Single2.34
0.234
2,34
૦.૨૩૪
:guidSystem.Guid99303dc9-8c76-42d9-9430-de3ee1ac25d099303dc9-8c76-42d9-9430-de3ee1ac25d0
:intSystem.Int32-1
42
299792458
12.34
૨૩
:longSystem.Int64-1
42
299792458
12.34
૨૩

本地化

Blazor 约束当前不支持本地化。

  • 数字只有在 0..9 的形式下才被认为是有效的,而不是来自非英语语言,例如 ૦..૯(古吉拉特语)。

  • 日期仅以 MM-dd-yyyyMM-dd-yy 或 ISO 格式 yyyy-MM-dd 的形式有效。

  • 布尔值必须为 truefalse

不支持的约束类型

Blazor 约束不支持以下约束类型,但希望将来会支持:

  • 贪心参数

    在 ASP.NET MVC 中,可以提供一个以星号开头的参数名称,并捕获包括正斜杠在内的 URL 块。

    /articles/Subject/*TheRestOfTheURL

  • 正则表达式

    Blazor 当前不支持基于正则表达式约束参数的能力。

  • 枚举

    目前不可能约束参数以匹配枚举的值。

  • 自定义约束

    无法定义自定义类来确定传递给参数的值是否有效。

参考资料

[1]

源代码: https://github.com/mrpmorris/blazor-university/tree/master/src/Routing/CapturingAParameterValue

[2]

源代码: https://github.com/mrpmorris/blazor-university/tree/master/src/Routing/ConstrainingRouteParameters

以上是关于Blazor University (23)路由 —— 路由参数的主要内容,如果未能解决你的问题,请参考以下文章

Blazor University (22)路由 —— 定义路由

Blazor University (27)路由 —— 检测导航事件

Blazor University (26)路由 —— 通过代码导航

Blazor University (25)路由 —— 通过 HTML 导航

Blazor University 介绍 - 什么是 Blazor?

Blazor University (31)表单 —— 验证