Параметр Blazor с нулевым значением

У нас есть ядро ​​приложения Blazor Server 3.1, мы добавляем компонент и вызываем его из навигации следующим образом

<a href="/Claimaction" class="nav-link">
                        <i class="far fa-circle nav-icon"></i>
                        <p>Claims</p>
                    </a>

Некоторое время я хочу достичь этого компонента другим с параметром, например / Claimaction / PId, и я хочу установить этот параметр напрямую путем ввода из самого компонента, но при вызове компонента из NAV без значения параметра набор компонентов Извините, нет ничего в этот адрес. как решить эту проблему, чтобы позволить пользователю устанавливать значение параметра с помощью трех способов

  1. по Nav like / Claimaction / 100001
  2. по компоненту Управление вводом
  3. Разрешить открытый компонент с нулевым значением параметра

person Arkan I. Salman    schedule 25.01.2021    source источник


Ответы (1)


Я думаю, что вы ищете необязательный параметр Route.

Начиная с .Net5, необязательные параметры маршрута существуют изначально. Просто добавьте ? в конце параметра.

@page "/Claimaction/{ClaimsId:int}"
@* if navigation without id, should be possible, this route is needed too  *@
@page "/Claimaction"
  
@* for .NET 5 only on @page directive is needed
    @page "/Claimaction/{ClaimsId:int?}"
*@

@code{

  [Parameter]
  public Int32? ClaimsId { get; set; }

  public override async Task OnParametersSetAsync()
  {
        await base.OnParametersSetAsync();
        ClaimsId = ClaimsId ?? -1; // set default value if not set via routing or input
  }

}


Поскольку ClaimsId имеет имя в качестве параметра маршрутизатора {ClaimsId:int}, он привязывается при использовании через URL-адрес, например / ClaimsAction / 10235 (способ 1)

Поскольку ClaimsId - это Parameter, вы можете установить его через привязку или любым другим способом. (Способ 2). Даже если директива @page существует, вы все равно можете использовать ее как обычный компонент, вложенный в другие компоненты или ваш макет.

Поскольку ClaimsId является типом, допускающим значение NULL, для него вообще не требуется значение. Если значение не получено ни через маршрутизацию, ни через ввод, значение будет установлено на -1. Чтобы добиться такого поведения, мы переопределяем SetParamterAsync и устанавливаем там значение по умолчанию ( ClaimsId = ClaimsId ?? -1;).

Я бы порекомендовал прочитать и этот урок.

person Just the benno    schedule 25.01.2021
comment
спасибо за повтор, я скоро попробую - person Arkan I. Salman; 26.01.2021
comment
спасибо, это решит проблему, добавьте две @page, одну с параметром, а другую без - person Arkan I. Salman; 27.01.2021