Raymond Gauthier
2021/02/04
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: