Se diamo un'occhiata al file App.razor di una Blazor Web Application, noteremo la presenza di un componente chiamato HeadOutlet:
Questo componente funziona come una sorta di placeholder, così che dalle nostre pagine possiamo modificare il contenuto del nodo head dell'HTML generato.
Per esempio, se abbiamo realizzato un sito multi-lingua, una best practice è quella di impostare il content-language metadata. In una pagina, tramite HeadContent, possiamo aggiungere del markup, che verrà renderizzato alla posizione di HeadOutlet:
@page "/weather" @attribute [StreamRendering] <PageTitle>@Title</PageTitle> <HeadContent> <meta http-equiv="content-language" content="@currentLanguage" /> <meta name="description" content="@description"> </HeadContent> ...
Nell'esempio in alto, abbiamo impostato un paio di metadati, il già citato content-language e description, il cui contenuto è in binding con delle variabili che possiamo impostare nella nostra logica in C#. Abbiamo anche sfruttato un componente PageTitle per impostare il titolo della pagina.
Un aspetto importante da sottolineare è che HeadOutlet, in App.razor, deve essere configurato con il corretto RenderMode. Per esempio, immaginiamo di trovarci in condizioni di routing statico (https://www.aspitalia.com/script/1472/Routing-Statico-PreRendering-Blazor-Web-App.aspx).
In questo caso un HeadOutlet statico, senza alcun rendermode specificato
<head> .... <HeadOutlet /> @* Static HeadOutlet *@ </head> <body> <Routes /> @* Static routing *@ <script src="_framework/blazor.web.js"></script> </body>
funzionerà esclusivamente con le pagine processate lato server, quindi o statiche, o in pre-rendering.
Viceversa, un HeadOutlet interattivo
<head> .... <HeadOutlet @rendermode="@InteractiveWebAssembly" /> @* Interactive HeadOutlet *@ </head> <body> <Routes /> @* Static routing *@ <script src="_framework/blazor.web.js"></script> </body>
funzionerà esclusivamente con pagine interattive.
Il comportamento cambia drasticamente se invece attiviamo il routing interattivo (https://www.aspitalia.com/script/1473/Limitare-Richieste-Lato-Server-Interactive-Routing-Blazor.aspx). In questo caso, impostando HeadOutlet come interattivo, faremo sì che il componente funzioni in entrambe le condizioni (pagine statiche e interattive):
<head> ... <HeadOutlet @rendermode="@InteractiveWebAssembly" /> @* Interactive HeadOutlet *@ </head> <body> <Routes @rendermode="@InteractiveWebAssembly" /> @* Interactive routing *@ <script src="_framework/blazor.web.js"></script> </body>
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Cancellare una run di un workflow di GitHub
Creare alias per tipi generici e tuple in C#
Implementare l'infinite scroll con QuickGrid in Blazor Server
Creare una custom property in GitHub
Effettuare il binding di date in Blazor
Ottimizzare la latenza in Blazor 8 tramite InteractiveAuto render mode
Eseguire script pre e post esecuzione di un workflow di GitHub
Hosting di componenti WebAssembly in un'applicazione Blazor static
Utilizzare il metodo CountBy di LINQ per semplificare raggruppamenti e i conteggi
Disabilitare automaticamente un workflow di GitHub (parte 2)
Creare un webhook in Azure DevOps
Sviluppare un'interfaccia utente in React con Tailwind CSS e Preline UI