Nozioni fondamentali su ASP.NET Core Blazor
Nota
Questa non è la versione più recente di questo articolo. Per la versione corrente, vedere la versione .NET 9 di questo articolo.
Avviso
Questa versione di ASP.NET Core non è più supportata. Per altre informazioni, vedere i criteri di supporto di .NET e .NET Core. Per la versione corrente, vedere la versione .NET 9 di questo articolo.
Importante
Queste informazioni si riferiscono a un prodotto non definitive che può essere modificato in modo sostanziale prima che venga rilasciato commercialmente. Microsoft non riconosce alcuna garanzia, espressa o implicita, in merito alle informazioni qui fornite.
Per la versione corrente, vedere la versione .NET 9 di questo articolo.
Gli articoli sulle nozioni fondamentali offrono linee guida sui principali concetti di Blazor. Alcuni dei concetti richiedono una conoscenza di base dei componenti di Razor, che vengono descritti ulteriormente nella sezione successiva di questo articolo e trattati in dettaglio negli articoli sui componenti.
Concetti relativi al rendering statico e interattivo
Razoril rendering dei componenti viene eseguito in modo statico o interattivo.
Il rendering statico o statico è uno scenario lato server che indica che il rendering del componente viene eseguito senza la capacità di interazione tra l'utente e il codice .NET/C#. Gli eventi DOM JavaScript e HTML rimangono invariati, ma non è possibile elaborare eventi utente nel client con .NET in esecuzione nel server.
interattività interattiva/ o rendering interattivo significa che il componente ha la capacità di elaborare gli eventi .NET e l'associazione tramite codice C#. Gli eventi e l'associazione .NET vengono elaborati nel server dal runtime di ASP.NET Core o nel browser nel client dal runtime di Blazor basato su WebAssembly.
Importante
Quando si usa un Blazor Web App, la maggior parte dei componenti di esempio della Blazor documentazione richiede interattività per funzionare e dimostrare i concetti trattati negli articoli. Quando si testa un componente di esempio fornito da un articolo in un Blazor Web App, assicurarsi che l'app adotti l'interattività globale o che il componente adotti una modalità di rendering interattiva. Altre informazioni su questo argomento vengono fornite da ASP.NET Core Blazor modalità di rendering nella sezione Componenti di, che verrà visualizzata più avanti nel set di documentazione Blazor.
Altre informazioni su questi concetti e su come controllare il rendering statico e interattivo sono disponibili nell'articolo ASP.NET Core Blazor render modes più avanti nella Blazor documentazione.
Concetti relativi al rendering di client e server
In tutta la Blazor documentazione, l'attività che viene eseguita nel sistema dell'utente si dice che si verifichi client-side o sul lato client. L'attività che viene eseguita su un server viene in genere eseguita sul server o lato server.
Il termine rendering significa produrre il markup HTML visualizzato dai browser.
Rendering lato client (CSR) indica che il markup HTML finale viene generato dal runtime .NET WebAssembly sul client. Nessun codice HTML per l'interfaccia utente generata dal client dell'app viene inviato da un server al client per questo tipo di rendering. L'interattività dell'utente con la pagina è presunta. Non esiste il concetto di rendering lato client statico. Si presuppone che CSR sia interattivo, quindi "rendering lato client interattivo" e "CSR interattivo" non vengono usati dal settore o nella Blazor documentazione.
Il rendering lato server (SSR) indica che il markup HTML finale viene generato dal runtime di ASP.NET Core nel server. Il codice HTML viene inviato al client tramite una rete per la visualizzazione dal browser del client. Nessun codice HTML per l'interfaccia utente generata dal server dell'app viene creato dal client per questo tipo di rendering. SSR può essere di due varietà:
- SSR statico: il server produce codice HTML statico che non fornisce interattività per l'utente né mantiene lo stato del componente.
- SSR interattivo: Blazor gli eventi consentono l'interattività degli utenti e Razor lo stato del Blazor componente è gestito dal framework.
Il "prerendering" è il processo di rendering iniziale del contenuto della pagina sul server senza abilitare i gestori di eventi per i controlli già eseguiti. Il server restituisce l'interfaccia utente HTML della pagina appena possibile in risposta alla richiesta iniziale, che rende l'app più reattiva agli utenti. Il prerendering può anche migliorare l'ottimizzazione del motore di ricerca (SEO) eseguendo il rendering del contenuto per la risposta HTTP iniziale usata dai motori di ricerca per calcolare la classificazione delle pagine. Il prerendering è sempre seguito dal rendering finale, nel server o nel client.
Componenti Razor
Le app Blazor si basano su componenti Razor, spesso chiamati semplicemente componenti. Un componente è un elemento dell'interfaccia utente, ad esempio una pagina, una finestra di dialogo o un modulo per l'immissione di dati. I componenti sono classi .NET C# compilati in assembly .NET.
Razor si riferisce al modo in cui i componenti sono solitamente scritti sotto forma di pagina di markup Razor per la logica e la composizione dell'interfaccia utente lato client.
Razor è una sintassi per la combinazione di markup HTML con codice C# progettata per la produttività degli sviluppatori. I file Razor usano l'estensione .razor
.
Anche se alcuni sviluppatori Blazor e risorse online usano il termine "componenti di Blazor", nella documentazione non è così e viene in genere usato il termine "componenti di Razor" o "componenti".
La documentazione di Blazor adotta diverse convenzioni per illustrare e descrivere i componenti:
- In genere, gli esempi rispettano le convenzioni di codifica ASP.NET Core/C# e le linee guida di progettazione. Per altre informazioni, vedere le risorse seguenti:
- Il codice del progetto, i percorsi e i nomi dei file, i nomi dei modelli di progetto e altri termini specializzati sono in lingua inglese degli Stati Uniti e di solito sono racchiusi in blocchi di codice.
- Ai componenti si fa in genere riferimento con il nome della classe C# (notazione Pascal) seguito dalla parola "component". Ad esempio, "
FileUpload
component" fa riferimento a un componente tipico per il caricamento di file. - In genere, il nome della classe C# di un componente è uguale al nome file.
- I componenti instradabili generalmente impostano gli URL relativi sul nome della classe del componente in kebab-case. Ad esempio, un componente
FileUpload
include la configurazione di routing per raggiungere il componente sottoposto a rendering nell'URL relativo/file-upload
. Il routing e la navigazione sono trattati in ASP.NET Core Routing e navigazioneBlazor. - Quando vengono usate più versioni di un componente, vengono numerate in sequenza. Ad esempio, il componente
FileUpload3
viene raggiunto in/file-upload-3
. -
Razor Le direttive all'inizio di una definizione di componente (
.razor file
) vengono inserite nell'ordine seguente:@page
,@rendermode
(.NET 8 o versione successiva),@using
istruzioni, altre direttive in ordine alfabetico. - Sebbene non sia necessario per
private
i membri, i modificatori di accesso vengono usati negli esempi di articoli e nelle app di esempio. Ad esempio,private
viene indicato per dichiarare un campo denominatomaxAllowedFiles
comeprivate int maxAllowedFiles = 3;
. - I valori dei parametri del componente iniziano con un simbolo riservato, ma non è obbligatorio. I valori letterali (ad esempio, valori booleani), le parole chiave (ad esempio
this
, ) enull
come valori dei parametri del componente non sono preceduti da@
, ma si tratta anche di una convenzione di documentazione. Il proprio codice può anteporre ai letterali@
se lo si desidera. - Le classi C# usano la
this
parola chiave ed evitano di anteporre un carattere di sottolineatura (_
) ai campi ai quali si assegna nei costruttori, il che differisce dalle linee guida di progettazione del framework ASP.NET Core. - Negli esempi che usano costruttori primari (C# 12 o versione successiva) i parametri del costruttore primario vengono in genere usati direttamente dai membri della classe. Negli esempi di articolo le righe di codice vengono suddivise per ridurre lo scorrimento orizzontale. Queste interruzioni non influiscono sull'esecuzione, ma possono essere rimosse quando vengono incollate nel tuo progetto.
Altre informazioni sulla sintassi dei componenti Razor sono disponibili nella sezione Razor sintassi dei componenti ASP.NET CoreRazor.
Quello che segue è un componente contatore di esempio e una parte di un'app creata da un modello di progetto Blazor. La trattazione dettagliata dei componenti è disponibile negli articoli sui componenti più avanti nella documentazione. L'esempio seguente illustra i concetti relativi ai componenti visti negli articoli sulle nozioni fondamentali prima di arrivare agli articoli sui componenti più avanti nella documentazione.
Counter.razor
:
Il componente presuppone che una modalità di rendering interattiva venga ereditata da un componente padre o applicata a livello globale all'app.
@page "/counter"
<PageTitle>Counter</PageTitle>
<h1>Counter</h1>
<p role="status">Current count: @currentCount</p>
<button class="btn btn-primary" @onclick="IncrementCount">Click me</button>
@code {
private int currentCount = 0;
private void IncrementCount() => currentCount++;
}
Il componente presuppone che una modalità di rendering interattiva venga ereditata da un componente padre o applicata a livello globale all'app.
@page "/counter"
<PageTitle>Counter</PageTitle>
<h1>Counter</h1>
<p role="status">Current count: @currentCount</p>
<button class="btn btn-primary" @onclick="IncrementCount">Click me</button>
@code {
private int currentCount = 0;
private void IncrementCount() => currentCount++;
}
@page "/counter"
<PageTitle>Counter</PageTitle>
<h1>Counter</h1>
<p role="status">Current count: @currentCount</p>
<button class="btn btn-primary" @onclick="IncrementCount">Click me</button>
@code {
private int currentCount = 0;
private void IncrementCount()
{
currentCount++;
}
}
@page "/counter"
<PageTitle>Counter</PageTitle>
<h1>Counter</h1>
<p role="status">Current count: @currentCount</p>
<button class="btn btn-primary" @onclick="IncrementCount">Click me</button>
@code {
private int currentCount = 0;
private void IncrementCount()
{
currentCount++;
}
}
@page "/counter"
<h1>Counter</h1>
<p>Current count: @currentCount</p>
<button class="btn btn-primary" @onclick="IncrementCount">Click me</button>
@code {
private int currentCount = 0;
private void IncrementCount()
{
currentCount++;
}
}
@page "/counter"
<h1>Counter</h1>
<p>Current count: @currentCount</p>
<button class="btn btn-primary" @onclick="IncrementCount">Click me</button>
@code {
private int currentCount = 0;
private void IncrementCount()
{
currentCount++;
}
}
Il componente Counter
precedente:
- Imposta la route con la direttiva
@page
nella prima riga. - Imposta il titolo e l'intestazione della pagina.
- Esegue il rendering del conteggio corrente con
@currentCount
.currentCount
è una variabile intera definita nel codice C# del blocco@code
. - Visualizza un pulsante per attivare il metodo
IncrementCount
, che è disponibile anche nel blocco@code
e aumenta il valore della variabilecurrentCount
.
Modalità di rendering
Gli articoli nel nodo Fundamentals fanno riferimento al concetto di modalità di rendering. Questo argomento è trattato in dettaglio nell'articolo sui
Per i primi riferimenti in questo nodo di articoli ai concetti di modalità di rendering, si noti quanto segue per ora:
Ogni componente in un Blazor Web App oggetto adotta una modalità di rendering per determinare il modello di hosting usato, dove viene eseguito il rendering e se viene eseguito o meno il rendering statico nel server, il rendering con per l'interattività dell'utente nel server o il rendering per l'interattività dell'utente nel client (in genere con prerendering sul server).
Blazor Server e Blazor WebAssembly le app per le versioni di ASP.NET Core precedenti a .NET 8 mantengono l'attenzione sui concetti del modello di hosting, non sulle modalità di rendering. Le modalità di rendering sono concettualmente applicate a Blazor Web App in .NET 8 o versioni successive.
La tabella seguente illustra le modalità di rendering disponibili per i componenti Razor in Blazor Web App. I modi di rendering si applicano ai componenti con la direttiva @rendermode
sull'istanza del componente o sulla definizione del componente. È anche possibile impostare una modalità di rendering per l'intera app.
Nome | Descrizione | Posizione di rendering | Interattivo |
---|---|---|---|
Server statico | Rendering statico lato server (SSR - Server-Side Rendering) | Server | No |
Server interattivo | Rendering lato server interattivo (SSR interattivo) con Blazor Server | Server | Sì |
WebAssembly interattivo | Rendering lato client (CSR) con Blazor WebAssembly† | Cliente | Sì |
Auto interattivo | SSR interattivo che usa Blazor Server inizialmente e quindi CSR nelle visite successive dopo il download del bundle Blazor | Server, poi client | Sì |
Si ritiene che il rendering lato client (CSR) sia interattivo. "Rendering cliente interattivo " e "CSR interattivo " non vengono utilizzati dall'industria o nella Blazor documentazione.
Le informazioni precedenti sulle modalità di rendering sono tutte le informazioni necessarie per comprendere gli articoli sui nodi Fundamentals . Se sei nuovo a Blazor e leggi gli articoli Blazor in ordine scorrendo verso il basso il sommario, puoi posticipare l'approfondimento delle informazioni dettagliate sulle modalità di rendering fino a raggiungere l'articolo Modalità di rendering di ASP.NET Core nel nodo Componenti.
DOM (Document Object Model)
I riferimenti al Document Object Model (Modello a Oggetti di Documento) usano l'abbreviazione DOM.
Per ulteriori informazioni, vedi le seguenti risorse:
- Introduzione al DOM (documentazione mdn)
- Specifica del modello a oggetti documento di livello 1 (W3C)
Subset di API .NET per le app Blazor WebAssembly
Un elenco curato di API .NET specifiche supportate nel browser per Blazor WebAssembly non è disponibile. Tuttavia, è possibile cercare manualmente un elenco di API .NET annotate con [UnsupportedOSPlatform("browser")]
per individuare le API .NET non supportate in WebAssembly.
Nota
I collegamenti della documentazione alla sorgente di riferimento .NET generalmente caricano il ramo predefinito del repository, che rappresenta lo sviluppo attuale per la prossima versione di .NET. Per selezionare un tag per una versione specifica, usare il menu a discesa Switch branches or tags. Per altre informazioni, vedere How to select a version tag of ASP.NET Core source code (dotnet/AspNetCore.Docs #26205) (Come selezionare un tag di versione del codice sorgente di ASP.NET - dotnet/AspNetCore.Docs #26205).
Per ulteriori informazioni, vedi le seguenti risorse:
- Librerie di classi: analizzatore della compatibilità del browser sul lato client
-
Annotare le API come non supportate in piattaforme specifiche (
dotnet/designs
repository GitHub
App di esempio
Le app di esempio della documentazione sono disponibili per la consultazione e il download:
Blazor repository GitHub di esempi (dotnet/blazor-samples
)
Individuare un'app di esempio selezionando prima la cartella della versione corrispondente alla versione di .NET con cui si sta lavorando.
App di esempio nel repository:
- Blazor Web App
- Blazor WebAssembly
- Blazor Web App Esempio di tutorial sui film (Costruire un'app di database per i film (Panoramica))
- Blazor Web App con SignalR (Usa ASP.NET Core SignalR con Blazor)
- Due
e un'app per chiamare le API web (server) (Chiamare un'API web da un'app ASP.NET Core ) - Blazor Web App con OIDC (modelli BFF e non BFF) (Protezione di un ASP.NET Core Blazor Web App con OpenID Connect (OIDC))
- Blazor Web App con Entra (Proteggi un ASP.NET Core Blazor Web App con Microsoft Entra ID)
- Blazor WebAssemblyregistrazione abilitata per gli ambiti (registrazione ASP.NET CoreBlazor)
- Blazor WebAssemblycon ASP.NET Core Identity (Proteggere ASP.NET Core con ASP.NET Core Blazor WebAssemblyIdentity)
- .NET MAUI Blazor Hybridapp con un'interfaccia Blazor Web App utente condivisa fornita da una Razor libreria di classi (RCL) (Creare un'app .NET MAUIBlazor Hybrid con un Blazor Web App)
- Altri esempi (vedere il file README del repository GitHub degli esempi Blazor)
App di esempio nel repository:
- Blazor Web App
- Blazor WebAssembly
- Esempio di tutorial Blazor Web App Film (Costruire un'applicazione di database di film (Panoramica))
- Blazor Web App con SignalR (Usare ASP.NET Core SignalR con Blazor)
- Due
e un'app per chiamare le API del server Web (chiamare un'API web da un'app ASP.NET Core ) ) - Blazor Web App con modelli OIDC (BFF e non BFF) (Proteggere un ASP.NET Core Blazor Web App con OpenID Connect (OIDC))
- Blazor WebAssemblyregistrazione abilitata per gli ambiti (registrazione ASP.NET CoreBlazor)
- Blazor WebAssembly con ASP.NET Core Identity (Proteggi ASP.NET Core con ASP.NET Core Blazor WebAssemblyIdentity)
- .NET MAUI Blazor Hybridapp con un'interfaccia Blazor Web App utente condivisa fornita da una Razor libreria di classi (RCL) (Compilare un'app .NET MAUIBlazor Hybrid con un Blazor Web App)
- Altri esempi (vedere il file README del repository GitHub degli esempi Blazor)
Il repository di esempio contiene due tipi di esempi:
- Le app di esempio di snippet forniscono gli esempi di codice visualizzati negli articoli. Queste app vengono compilate ma non sono necessariamente eseguibili. Queste app sono utili solo per ottenere codice di esempio visualizzato negli articoli.
- App di esempio che accompagnano gli articoli Blazor compilano ed eseguono per gli scenari seguenti:
- Blazor Server e Blazor WebAssembly con SignalR
- Registrazione con ambiti abilitati Blazor WebAssembly
Per ulteriori informazioni, un elenco degli esempi e le istruzioni per il download, consulta il file README del repository GitHub degli esempi Blazor.
L'app di test di base del repository ASP.NET Core è anche un set utile di esempi per diversi Blazor scenari:
BasicTestApp
nell'origine di riferimento di ASP.NET Core (dotnet/aspnetcore
)
Nota
I collegamenti della documentazione alla sorgente di riferimento .NET generalmente caricano il ramo principale del repository, che rappresenta lo sviluppo corrente per la prossima versione di .NET. Per selezionare un tag per una versione specifica, utilizzare l'elenco a discesa "Cambia rami o tag". Per altre informazioni, vedere How to select a version tag of ASP.NET Core source code (dotnet/AspNetCore.Docs #26205) (Come selezionare un tag di versione del codice sorgente di ASP.NET - dotnet/AspNetCore.Docs #26205).
Multipli di byte
Le dimensioni dei byte di .NET usano prefissi metrici per i multipli di byte non decimali in base alle potenze di 1024.
Nome (abbreviazione) | Dimensione | Esempio |
---|---|---|
Kilobyte (KB) | 1.024 byte | 1 KB = 1.024 byte |
Megabyte (MB) | 1.0242 byte | 1 MB = 1.048.576 byte |
Gigabyte (GB) | 1.0243 byte | 1 GB = 1.073.741.824 byte |
Richieste di supporto
Solo i problemi correlati alla documentazione sono appropriati per il repository dotnet/AspNetCore.Docs
.
Per il supporto al prodotto, non aprire un problema relativo alla documentazione. Richiedere assistenza tramite uno o più dei canali di supporto seguenti:
Per un potenziale bug nel framework o per fornire feedback sul prodotto, aprire una segnalazione per l'unità del prodotto ASP.NET Core nella sezione dotnet/aspnetcore
issues. I report sui bug in genere richiedono quanto segue:
- Spiegazione chiara del problema: seguire le istruzioni nel modello di problema GitHub fornito dall'unità del prodotto quando si apre il problema.
- Progetto minimo per la riproduzione: pubblicare un progetto su GitHub che gli ingegneri dell'unità di prodotto possano scaricare ed eseguire. Collegare il progetto al commento di apertura dell'issue.
Per un potenziale problema con un articolo su Blazor, apri una segnalazione di documentazione. Per aprire un problema di documentazione, usare il collegamento Open a documentation issue feedback (Apri un problema di documentazione) nella parte inferiore dell'articolo. I metadati aggiunti al problema forniscono dati di tracciamento e eseguono automaticamente il ping dell'autore dell'articolo. Se l'argomento è stato discusso con l'unità prodotto prima di aprire il problema della documentazione, inserire un collegamento incrociato al problema di progettazione nel commento di apertura del problema della documentazione.
Per problemi o commenti e suggerimenti su Visual Studio, usare i movimenti Segnala un problema o Suggerisci una funzionalità da Visual Studio, che apre problemi interni per Visual Studio. Per altre informazioni vedere Feedback di Visual Studio.
Per problemi relativi a Visual Studio Code, chiedere supporto nei forum di supporto della community. Per i report sui bug e il feedback sul prodotto, aprire un problema nel microsoft/vscode
repository GitHub.
I problemi di GitHub per la documentazione su Blazor vengono contrassegnati automaticamente per la valutazione nel progetto Blazor.Docs
(repository GitHub di dotnet/AspNetCore.Docs
). Attendere un breve periodo di tempo per ricevere una risposta, soprattutto nei fine settimana e nei giorni festivi. In genere, gli autori della documentazione rispondono entro 24 ore nei giorni feriali.
Collegamenti della community alle risorse di Blazor
Per una raccolta di collegamenti alle risorse di Blazor gestite dalla community, visitare Awesome Blazor.
Nota
Microsoft non è proprietaria né gestisce o supporta Awesome Blazor e la maggior parte dei prodotti e dei servizi della community descritti e disponibili tramite collegamento.