Параметр Блейзора с нулевым значением

#.net-core #blazor

#.net-core #blazor

Вопрос:

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

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

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

  1. по навигатору типа «/Claimaction/100001»
  2. с помощью управления вводом компонентов
  3. Разрешить открытый компонент с нулевым значением параметра

Ответ №1:

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

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

 @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 это a Parameter , вы можете установить его с помощью привязки или любым другим способом. (Способ 2). Даже если @page директива существует, вы все равно можете использовать ее как «обычный» компонент, вложенный в другие компоненты или ваш макет.

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

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

Комментарии:

1. спасибо за ваш реплей, я скоро попробую

2. благодаря этому проблема решена, добавьте два @page один с параметром, а другой без