При разработке приложения Blazor Hybrid возможна ситуация, при которой вам потребуется осуществит переход по заданному пути непосредственно в коде C#. Для навигации в приложении непосредственно из кода C# используется экземпляр класса NavigationManager
.
Создадим новое приложение Blazor Hybrid и изменим код компонента Home
следующим образом:
@page "/" @inject NavigationManager Navigation <h1>Hello, world!</h1> Welcome to your new app. <button @onclick="NavigateToCounter">Счётчик</button> @code{ private void NavigateToCounter() { Navigation.NavigateTo("/counter"); } }
Разберем этот пример. Первое, на что необходимо обратить внимание — это новая директива Razor — @inject
. Эта директива используется для внедрения в компонент сервиса (службы) из контейнера зависимостей. Директива используется следующим образом:
@inject тип имя
тип
— тип внедряемого сервиса (службы). В нашем случае — этоNavigationManager
.имя
— имя переменной, с которой мы будем далее работать в коде C#. В нашем случае — этоNavigation
В коде компонента мы объявили метод NavigateToCounter() в котором используем NavigationManager
для перехода к странице счётчика:
Navigation.NavigateTo("/counter");
а в разметке компонента мы добавляем кнопку для которой назначаем в качестве обработчика события onclick
наш метод:
<button @onclick="NavigateToCounter">Счётчик</button>
Теперь можете запустить приложение, нажать на кнопку «Счётчик» и убедиться, что приложение перейдет к странице Counter
.
Ниже представлены члены класса NavigationManager
, которые мы можем использовать в нашем приложении:
Имя | Тип | Описание | |
Свойство | BaseUri |
string |
Возвращает базовый URI (с завершающей косой чертой), который можно добавить в начало относительных путей URI для получения абсолютного URI. Обычно, BaseUri соответствует атрибуту href элемента документа <base> в wwwroot/index.html |
Свойство | Uri |
string |
Возвращает текущий абсолютный URI |
Метод | NavigateTo() |
void |
Позволяет переходить по указанному URL. Этот метод перегружен и имеет несколько версий. Наиболее часто используются следующие версии метода:
|
Метод | ToAbsoluteUri() |
Uri |
Преобразует относительный URL в абсолютный |
Метод | ToBaseRelativePath() |
string |
Преобразует абсолютный URI в относительный URI (относительно базового префикса) |
Событие | LocationChanged |
EventHandler<LocationChangedEventArgs> |
Срабатывает при изменении расположения навигации |
В приложениях Blazor Hybrid часть представленных методов и свойств, в принципе, бесполезны, хотя и могут использоваться. Например, мы можем получить значения свойств BaseUri
и Uri
, но по большому счёту нам эти свойства мало пригодятся. Однако, метод NavigateTo()
вполне может использоваться в приложении для программной навигации по страницам приложения.
Итого
Для навигации в приложении Blazor Hybrid непосредственно из кода C# используется сервис NavigationManager
, у которого определен метод NavigateTo()
. Чтобы использовать этот сервис в компоненте Razor необходимо использовать директиву @inject
для запроса сервиса из контейнера зависимостей.