Il routing in Blazor è abbastanza limitato, e tra le varie lacune, non possiede un sistema per la generazione degli URL. Pertanto, tutte le volte che dobbiamo creare un link a una pagina, la soluzione più semplice è quella di scriverlo in forma di stringa.
<li class="nav-item px-3"> <NavLink class="nav-link" href="counter"> Counter </NavLink> </li>
Come sappiamo, questo approccio è soggetto a potenziali errori di battitura, e soprattutto mal si presta a refactoring dovesse la nostra logica di routing cambiare in futuro.
Fortunatamente, possiamo facilmente creare una classe in grado di creare il link in maniera dinamica, in base al contenuto della direttiva @page del componente:
public static class RouteHelper { public static string GetUrl<TComponent>() where TComponent : ComponentBase { Type type = typeof(TComponent); var att = type.GetCustomAttributes(typeof(RouteAttribute), inherit: false) .OfType<RouteAttribute>() .SingleOrDefault(); if (att == null) return null; return att.Template; } }
Questa direttiva, infatti, viene tradotta in fase di compilazione con l'attributo RouteAttribute. Il codice in alto, non fa altro che recuperarlo dalla classe del componente e restituirlo come risultato.
A questo punto, potremo riscrivere il nostro link precedente come segue, con il vantaggio di non dover più usare una stringa statica, bensì facendo riferimento all'oggetto su cui vogliamo navigare.
<NavLink class="nav-link" href="@(RouteHelper.GetUrl<Counter>()"> <span class="oi oi-plus" aria-hidden="true"></span> Counter </NavLink>
In questo modo, la definizione della route resta centralizzata sul componente Counter e, se dovessimo cambiarla, tutti i link si adegueranno di conseguenza.
Quanto visto finora è solo un semplice punto di partenza, che non supporta ancora due importanti use case: Route con parametri e Route multiple. Ce ne occuperemo in uno dei prossimi script.
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Creare una libreria CSS universale: i bottoni
Usare le navigation property in QuickGrid di Blazor
Implementare l'infinite scroll con QuickGrid in Blazor Server
Recuperare l'ultima versione di una release di GitHub
Routing statico e PreRendering in una Blazor Web App
Gestire la cancellazione di una richiesta in streaming da Blazor
Utilizzare il metodo Index di LINQ per scorrere una lista sapendo anche l'indice dell'elemento
Configurare lo startup di applicazioni server e client con .NET Aspire
Creare gruppi di client per Event Grid MQTT
Definire stili a livello di libreria in Angular
Generare HTML a runtime a partire da un componente Razor in ASP.NET Core
Come EF 8 ha ottimizzato le query che usano il metodo Contains
I più letti di oggi
- Tutorial Entity Framework 6
- Tutorial Entity Framework
- Tutorial HTML5
- RT @aspitalia Partecipa al nostro evento #RCD4, fai un RT e sarai estratto per 1 copia di #sl3guidacompleta! http://u.aspitalia.com/bw
- Migliorare l'organizzazione delle risorse con Azure Policy
- Configurare più site su unico web role di Windows Azure
- Windows Phone 8 Developer Day - Milano
- ReBuild 2020 Live - Online
- ASPItalia.com Network: si aggiungono LINQItalia.com e SilverlightItalia.com
- Rilasciata la versione 1.0 di ASP.NET MVC