路由参数如何将值分配给Blazor中的特性



下面的代码块是Blazor文档。但我无法弄清楚"text"路由参数是如何以及在什么基础上为text属性赋值的。

@page "/RouteParameter"
@page "/RouteParameter/{text}"
<h1>Blazor is @Text!</h1>
@code {
[Parameter]
public string Text { get; set; }
protected override void OnInitialized()
{
Text = Text ?? "fantastic";
}
}

还有更多阅读

您阅读的Blazor文档并不是为了解释所有的路由。它只解释了Blazor是如何使用ASP.NET核心路由的。

有关ASP.NET核心路由的更多信息


绑定到ASP.NET核心路由

在Blazor Web应用程序的Startup.cs文件中,您会看到以下内容:

app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
endpoints.MapBlazorHub();
endpoints.MapFallbackToPage("/_Host");
});

MapBlazorHub()是Blazor如何连接到ASP.NET核心路由中的。


Blazor路由使用与MVC和Razor页面相同的路由器

示例:

MVC->[Route("customer/{id:int}")](控制器上的属性(

Razor Pages->@page "/customer/{id:int}"(页面指令(

Blazor->@page "/customer/{id:int}"(页面指令(


逐步

示例路线:@page "/customer/{id:int}"

  • 路线由最终用户导航到
  • ASP.NET核心路由器将URL与终结点匹配
  • URL被标记为路由值
  • "{id:int}"由路由约束处理,接受或拒绝,在这种情况下,转换为强类型int
  • 路由值被打包并提供给您的代码(控制器、组件等(,它提供1的客户id作为参数

警告:这是高级别的,掩盖了一些关键内容,请继续阅读有关ASP.NET核心路由的更多信息

TL;DR

Blazor通过忽略单词的大小写来匹配路由参数和属性。


Blazor从路由中获取所有参数,从类中获取所有属性,并忽略大小写进行赋值。

因此,小写text变为Text

这也适用于

@page "/RouteParameter"
@page "/RouteParameter/{Text}" // upper case Text
<h1>Blazor is @Text!</h1>
@code {
[Parameter]
public string Text { get; set; }
protected override void OnInitialized()
{
Text = Text ?? "fantastic";
}
}

但因为通常url没有大写,而C#属性以大写开头,所以它们可能会忽略大小写进行比较。

相关内容

  • 没有找到相关文章

最新更新