#navigation #blazor #blazor-webassembly
Вопрос:
Я пытаюсь изменить страницу в меню навигации. Я нажимаю на кнопку в меню навигации. Вызывается обработчик события OnClick. Он выполняется NavigationManager.NavigateTo("/target")
. В браузере URL-адрес изменяется на http://baseaddress/target как и ожидалось. Но целевая страница не отображается. Содержимое текущей страницы остается. Это не ожидаемое поведение, не так ли? Мне известен второй параметр с именем forceLoad. Но я не хочу полностью перезагружать страницу с сервера. Я хочу, чтобы навигация происходила на стороне клиента. Что я делаю не так?
Комментарии:
1. В какой
@page
директиве есть компонент, который должен быть доступен по адресу/target
. Какая@page
директива имеет текущий компонент? Одна из причин, по которой эта навигация «терпит неудачу», может заключаться в том, что обе ссылки указывают на одно и то же — текущий компонент.2. Директива целевой страницы такова
@page "/target"
. В настоящее время у@page "/"
них нет того же самого. Кроме того, когда я напрямую ввожу базовый адрес/цель в браузере, он идет туда, куда должен. Но это похоже на forceLoad = верно3. Кажется необычным, что это не работает. Я пока не могу точно определить это; я могу предложить дальнейшую диагностику. Есть ли у вас какие-либо выходные данные в окне вывода или консоли в браузере? В вашем
/target
компоненте вы можете проверить, что, напримерOnInitilized
, вызывается крюк жизненного цикла? В навигационном менеджере есть событиеLocationChanged
, это событие запущено? Существует ли сторонняя библиотека js, которая вмешивается в API истории HTML5?4. Действительно. Нет, при использовании NavigationManager вообще не создается никаких дополнительных выходных данных.
OnInitialized
не вызывается на/target
компоненте. НоLocationChanged
событие увольняется.IsNavigationIntercepted
имеет значение false иLocation
содержит правильный URL-адрес. Я не использую сторонние js. Единственная сторонняя библиотека, которую я использую, — это bootstrap
Ответ №1:
Во-первых, настройте компонент с @page
помощью директивы.
Во-вторых, используйте <NavLink>
для навигации вместо того, чтобы справляться onclick
самостоятельно.
Дополнительные сведения см. в разделе Школьная маршрутизация и навигация Blazor.
Комментарии:
1.
<NavLink>
В компоненте Wie сохраняется та же проблема. URL — адрес в браузере задан правильно, но страница не загружается
Ответ №2:
Я нашел проблему, и это была моя собственная ошибка. Я поместил @Body
тег в mainLayout.razor не непосредственно в его собственный html, а скорее в дочерний контент других компонентов razor
<div id="rootContainer">
<ContainerComponent>
<Content>
<MainMenu />
<div id="rootContentContainer">
@Body
</div>
</Content>
</MessageBoxContainer>
</div>