Что я хочу сделать, так это прочитать путь, указанный в атрибуте @page каждой страницы Razor, чтобы сослаться на него в меню навигации. Чтобы не приходилось вручную переделывать href, когда по какой-либо причине я хочу изменить URL-адрес.
Однако я не нашел способа прочитать атрибут страницы из компонентов, я что-то упустил или есть другой способ сделать это?
Просто чтобы визуализировать то, что я хочу, вот как это должно примерно выглядеть в конце:
<div class = "nav-item px-3">
<NavLink class = "nav-link" href=UploadPage.page>
<span class = "oi oi-data-transfer-upload" aria-hidden = "true"></span> Content Upload
</NavLink>
</div>
Инфраструктура blazor не предоставляет никаких API-интерфейсов публичный*, чтобы делать то, что вы хотите. Возможно, вы могли бы опубликовать сообщение на гитхаб в качестве запроса функции.
* Внутри таблица маршрутов создается путем сканирования ваших сборок на наличие RouteAttribute
.
Сказав это, существует этот пост в блоге об использовании генераторов исходного кода для чтения RouteAttribute
каждого компонента и создания навигационного меню для вас. К сожалению, чтобы использовать его, вы должны отключить генерацию исходного кода бритвы, чтобы сделать это в настоящее время, поскольку генераторы исходного кода не могут видеть выходные данные других генераторов исходного кода. Надеюсь, в будущем мы сможем использовать генераторы исходного кода с компилятором razor (Вот проблема, отслеживающая это).
Хм, автоматическая генерация на самом деле не вариант, так как я хочу сохранить свои отдельные значки :/
Internally, a route table is generated by scanning your assembilies for RouteAttribute
И это один из вариантов, который он может использовать...
Благодаря вкладу Джесси Гуда я нашел следующий относительно простой ответ на мою проблему, используя отражение.
Навменю:
<div class = "nav-item px-3">
<NavLink class = "nav-link" href = "@(PathTo<MyRazorPage>())">
<span class = "oi oi-book" aria-hidden = "true"></span> My ePaper
</NavLink>
</div>
Разрешающая функция:
private string PathTo<T>()
{
var attributes = typeof(T).GetCustomAttributes(typeof(Microsoft.AspNetCore.Components.RouteAttribute), inherit: false);
var route = (Microsoft.AspNetCore.Components.RouteAttribute) attributes[0];
return route.Template;
}
Что вы ищете ? Механизм, который позволяет вам читать шаблоны маршрутов всех маршрутизируемых компонентов до того, как ваш компонент MainLaout будет отрендерен? Или способ получить шаблон маршрута маршрутизируемого компонента, который будет отображаться непосредственно перед визуализацией компонента MainLaout?