Raymond Gauthier
2021/02/04



![[Microsoft]](./media/33d78541460aed85afa46d7871bd961762e93d35.png)
Framework gratuit et open-source.
Permet la construction d’interface utilisateur côté client en utilisant C# et fichiers *.razor (mix html et C#).
Une abtraction intéressante sur le rendering du DOM qui permet que celui-ci soit rendu autant côté client que server.
On va même plus loin en permettant que votre static web app en C# roule completement côté client via compilation Web Assembly.
Premier release: 2018, donc assez récent.




Permet d’écrire votre code en C# plutôt que Javascript.
On peut donc partager du code entre le frontend et le backend.
Functionne super bien en linux!
Gracieuseté de .NET core.
Très simple à mettre en place et rouler:
Interopérabilité Javascript.
Il est donc possible d’utiliser vos libraries javascript préférées si désiré.
Itération un peu longue lorsque comparée à des languages qui ne requiert pas de phases de compilation.
*.razor apparament à venir.Framework peut être assez opaque / complexe.
Beaucoup de documentation pour setup complexes clé en main.
Par contre, lorsqu’on veut quelque chose de plus simple / épuré, on est un peu laissé à nous même. Examples:
Il aura fallu à quelques reprises lorsque documentation déficiente:
*.razor & composants

Permet de mixer le code C# et html à même le fichier *.razor.
Le composant est un object C#, pouvant avoir des états, etc.
Il est possible de complètement séparer le code C# pour qu’il soit dans un *.cs.
On utilise alors une petite convention de noms.
@{
var quote = "The future depends on what you do today. - Mahatma Gandhi";
}
<p>@quote</p>
@foreach (var person in people)
{
<p>Name: @person.Name</p>
<p>Age: @person.Age</p>
}
@*
blabla
*@
Producer component side:
[Parameter]
public EventCallback<MyEventPayload> OnMyEvent { get; set; }
// ..
public async Task SomeOtherMethod()
{
// ..
await OnMyEvent.InvokeAsync(MyEventPayload());
}Consumer side;
<MyComponent
OnMyEvent="MyEvent"
>
</MyComponent>
App.razor


Blazor WebAssembly
blazor.webassembly.js.Blazor Server
blazor.server.js établit une connection SignalR avec le server.Définit dans _Host.cshtml via l’attribut render-mode du app.component.
Voici les mode que j’ai pu essayé:
ServerPrerendered
Server
Autres valeures possibles:
Static, WebAssembly, WebAssemblyPrerendered:
Voir render-mode - doc pour plus de détails.
2 tags intéressant à connaître:
<DataAnnotationsValidator />
<ValidationSummary />Une autre découvert côté validation:
From *.razor / blazor pages and components:
It can be retrived using @context.User (context being of type AuthenticationState) when inside the AuthorizeView which itself should be inside the top level App.razor CascadingAuthenticationState.
From a blazor component:
Otherwise, from a blazor component (still within a top level CascadingAuthenticationState), it can be retrieve using the cascading parameter of type Task<AuthenticationState>:
Session and stockage and le contexte Blazer Server:
Pour tout ce qui est stockage session (e.g: login, language), on peut faire un roundtrip vers un controlleur MVC standard de façon à raffraîchir les entête de requête avec de nouvelles données.
Présentation rendu disponible sur:
Code source également disponible: