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
Evitare (o ridurre) il repo-jacking sulle GitHub Actions
Path addizionali per gli asset in ASP.NET Core MVC
Limitare le richieste lato server con l'interactive routing di Blazor 8
Eseguire una query su SQL Azure tramite un workflow di GitHub
Triggerare una pipeline su un altro repository di Azure DevOps
Usare le navigation property in QuickGrid di Blazor
Creare una libreria CSS universale: Cards
Migliorare la scalabilità delle Azure Function con il Flex Consumption
Filtering sulle colonne in una QuickGrid di Blazor
Effettuare il binding di date in Blazor
Evitare il flickering dei componenti nel prerender di Blazor 8
Popolare una classe a partire dal testo, con Semantic Kernel e ASP.NET Core Web API