Module : Programmation .Net C#
Niveau : 4ème Génie Informatique (Spécialité Data Science)
Prérequis : TP 3 validé (Première application Blazor)
Dans le TP 3, vous avez abandonné l'austère console noire pour le monde coloré du Web. Vous avez créé une application interactive avec le modèle Blazor Web App de .NET 10. Ce modèle moderne unifie la flexibilité du Web et la puissance de C#. Ce chapitre dévoile ce qui se passe réellement "sous le capot" lorsque vous activez l'interactivité.
Depuis .NET 8 (et confirmé en .NET 10), Microsoft a introduit le concept de "Blazor Web App". Ce modèle est hybride et flexible.
Une page Blazor peut être rendue de plusieurs façons. C'est le développeur qui choisit :
C'est le mode que nous avons utilisé pour avoir l'effet "Temps Réel". Voici son architecture :
Figure 1 : L'architecture Interactive Server
En mode interactif, la page ne se recharge jamais entièrement (pas de F5). SignalR envoie juste les petits morceaux de HTML qui ont changé. C'est ce qui donne cette fluidité.
Lorsque vous créez un nouveau projet, vous obtenez une structure standardisée. Voici les fichiers primordiaux :
| Fichier / Dossier | Rôle Principal |
|---|---|
Program.cs |
Le Chef d'Orchestre. C'est le point d'entrée. Il configure le serveur Web, l'injection de dépendances (Services) et lance l'application. |
App.razor |
La Racine. Le composant parent de toute l'application. Il contient la structure HTML de base (`<html>`, `<body>`) et charge les scripts Blazor. |
Routes.razor |
Le Router. Il analyse l'URL demandée et décide quel composant afficher. Si l'URL n'existe pas, il affiche un message "Not Found". |
_Imports.razor |
Les Usings Globaux. Tous les `using` déclarés ici sont automatiquement disponibles dans tous les composants `.razor` du dossier. Évite de répéter `@using` partout. |
Components/Pages/ |
Vos Pages. C'est ici que vous créez vos vues (ex: `Home.razor`, `Counter.razor`). Chaque fichier avec `@page` devient une route. |
wwwroot/ |
Le Statique. Contient les fichiers CSS, JavaScript, images et polices qui sont envoyés directement au navigateur. |
Les fichiers .razor mélangent balises HTML et logique C#. Le caractère magique est l'arobase
@.
| Directive | Description |
|---|---|
@page "/url" |
Définit la route (URL) pour accéder à ce composant. |
@using |
Importe des namespaces (comme dans un fichier .cs). |
@code { ... } |
Bloc contenant la logique C# (variables, méthodes). |
Vous pouvez utiliser des structures de contrôle C# directement dans le HTML :
<p>
Statut :
@if (IsSystemOK)
{
<span class="text-success">OK</span>
}
else
{
<span class="text-danger">ERREUR</span>
}
</p>
C'est ici que Blazor remplace JavaScript. Nous lions l'interface utilisateur (UI) aux variables C#.
Utilisé pour réagir aux actions de l'utilisateur.
<button @onclick="RefreshSystem">Actualiser</button>
@code {
void RefreshSystem() {
// Code exécuté sur le serveur !
}
}
Le Two-Way Binding (liaison bidirectionnelle) permet de synchroniser une variable et un champ de saisie en temps réel.
// Lien direct entre l'input HTML et la variable C# Temperature
<input @bind="Temperature" />
<p>Vous avez saisi : @Temperature</p>
@code {
private string Temperature = "0";
}
Même si Blazor est puissant, ne mettez pas tout votre code dans le fichier .razor.
Module: .Net C# Programming
Level: 4th Year Computer Engineering (Data Science Specialty)
Prerequisite: LAB 3 Validated (First Blazor App)
In LAB 3, you moved from the austere black console to the colorful world of the Web. You created an interactive application using the Blazor Web App model from .NET 10. This modern model unifies Web flexibility with C# power. This chapter reveals what really happens "under the hood" when you enable interactivity.
Since .NET 8 (and confirmed in .NET 10), Microsoft introduced the "Blazor Web App" concept. It is hybrid and flexible.
A Blazor page can be rendered in several ways. The developer chooses:
This is the mode we used to achieve the "Real-Time" effect. Here is its architecture:
Figure 1: Interactive Server Architecture
In interactive mode, the page never fully reloads (no F5). SignalR sends only the small HTML chunks that changed. This provides the smoothness.
When you create a new project, you get a standardized structure. Here are the essential files:
| File / Folder | Main Role |
|---|---|
Program.cs |
The Conductor. The entry point. Configures the Web server, Dependency Injection (Services), and starts the app. |
App.razor |
The Root. The parent component of the entire app. It contains the basic HTML structure (`<html>`, `<body>`) and loads Blazor scripts. |
Routes.razor |
The Router. Analyzes the requested URL and decides which component to display. If the URL doesn't exist, it shows a "Not Found" message. |
_Imports.razor |
Global Usings. All `using` statements declared here are automatically available in all `.razor` components within the folder. Avoids repeating `@using` everywhere. |
Components/Pages/ |
Your Pages. This is where you create your views (e.g., `Home.razor`, `Counter.razor`). Each file with `@page` becomes a route. |
wwwroot/ |
Static Assets. Contains CSS, JavaScript, images, and fonts that are served directly to the browser. |
.razor files mix HTML tags and C# logic. The magic character is the at-symbol @.
| Directive | Description |
|---|---|
@page "/url" |
Defines the URL route to access this component. |
@using |
Imports namespaces (like in a .cs file). |
@code { ... } |
Block containing C# logic (variables, methods). |
You can use C# control structures directly within HTML:
<p>
Status :
@if (IsSystemOK)
{
<span class="text-success">OK</span>
}
else
{
<span class="text-danger">ERROR</span>
}
</p>
This is where Blazor replaces JavaScript. We bind the user interface (UI) to C# variables.
Used to react to user actions.
<button @onclick="RefreshSystem">Refresh</button>
@code {
void RefreshSystem() {
// Code executed on the server!
}
}
Two-Way Binding allows synchronizing a variable and an input field in real-time.
// Direct link between HTML input and C# variable Temperature
<input @bind="Temperature" />
<p>You typed: @Temperature</p>
@code {
private string Temperature = "0";
}
Even though Blazor is powerful, don't put all your code in the .razor file.