#.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 без значения параметра компонент устанавливается
Извините, по этому адресу ничего нет.
как решить эту проблему, чтобы разрешить пользователю устанавливать значение параметра с помощью трех способов
- по навигатору типа «/Claimaction/100001»
- с помощью управления вводом компонентов
- Разрешить открытый компонент с нулевым значением параметра
Ответ №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 один с параметром, а другой без