Как параметр маршрута назначает значение свойству в Blazor? - PullRequest
1 голос
/ 10 марта 2020

Ниже блока кода находится документация 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";
    }
}

Ответы [ 2 ]

2 голосов
/ 10 марта 2020

Там больше чтения!

Документация Blazor, которую вы читали, не предназначена для объяснения ВСЕХ маршрутизации. Это лишь объясняет, как Blazor использует ASP. NET Core Routing.

Подробнее о ASP. NET Core Routing


Привязка к ASP. NET Core Routing

В файле Startup.cs вашего Blazor Web App вы увидите что-то вроде следующего:

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

MapBlazorHub() - это то, как Blazor подключается к ASP. NET Core Routing.


В маршрутизации 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 Router
  • URL маркируется в значения маршрута
  • "{id:int}" обрабатываются Ограничения маршрута, и приняты или отклонены, и в этом регистр преобразуется в строго типизированный int
  • Значения маршрута упаковываются и передаются вашему коду (контроллер, компонент и т. д. c), и он предоставляет идентификатор клиента 1 в качестве параметра .

Предупреждение: это высокий уровень, и некоторые ключевые моменты заглушаются, пожалуйста, продолжайте читать Подробнее о ASP. NET Core Routing

1 голос
/ 10 марта 2020

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# начинаются с заглавной буквы, возможно, это сравнение игнорируется.

...