1

下面的代码块是 Blazor 文档。但我无法弄清楚“文本”路由参数如何以及在什么基础上为 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";
    }
}
4

2 回答 2

3

还有更多的阅读!

您正在阅读的 Blazor 文档并非旨在解释所有路由。它只解释了 Blazor 如何使用 ASP.NET Core 路由。

更多关于 ASP.NET Core 路由


绑定到 ASP.NET Core 路由

在 Blazor Web 应用的 Startup.cs 文件中,您将看到类似以下内容:

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

MapBlazorHub()是 Blazor 如何与 ASP.NET Core 路由联系在一起的。


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

例子:

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

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

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


一步步

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

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

警告:这是高级别的并且掩盖了一些关键的事情,请继续阅读更多关于 ASP.NET Core 路由

于 2020-03-10T13:52:11.997 回答
2

TL;博士

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# 属性以大写字母开头,所以它们可能会忽略大小写。

于 2020-03-10T12:55:58.777 回答