Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Blazor WebAssembly: Forms in Action

Blazor WebAssembly: Forms in Action

Ein Großteil an Softwarelösungen hantiert mit Daten. Formulare sind hier kaum wegzudenken und ein zentraler Bestandteil. Sei es das Anmelden über eine Login-Maske oder das Buchen von Konzertkarten, überall sind Sie zu finden.

In dieser Session zeigt Patrick Jahr anhand eines Beispiels wie Formulare mit Blazor WebAssembly in .NET 5 implementiert werden können. Jedoch ist der Aufbau eines Formulars nicht alles: wird ein Nutzer nicht richtig über fehlerhafte Eingaben informiert, oder muss zu lange warten, bis das Formular neue Daten geladen hat, verliert er direkt die Lust oder das Vertauen in die Anwendung. Daher wird in dieser Session auch ein großes Augenmerk auf die Validierung von Formularen gelegt. Schlussendlich ist noch die Diskussion von Performance-beeinträchtigenden Fakten in komplexeren Szenarien ein wichtiges Thema in diesem Webinar.

Patrick Jahr

April 14, 2021
Tweet

More Decks by Patrick Jahr

Other Decks in Programming

Transcript

  1. Hello, it’s me. Patrick Jahr Consultant @ Thinktecture AG E-Mail:

    [email protected] Twitter: @jahr_patrick Slides: https://thinktecture.com/patrick-jahr Blazor WebAssembly Forms in Action Patrick Jahr P
  2. - Formulare sind das meist genutzt Werkzeug um mit Nutzern

    zu interagieren - Verarbeitung von Daten ist eine der häufigsten Vorkommnisse in Anwendungen - z.B. Login, Profil, Bankdaten, Kommentar, und viele viele mehr - Werte sollten validiert werden da Benutzer viel Spielraum bei der Eingabe haben - Die Benutzeroberfläche muss etwaige Erwartungen und Fehler klar angeben - Komplexe Logik durch Abhängigkeiten zwischen den Feldern Blazor WebAssembly Forms in Action Motivation
  3. Kernelement: <EditForm> - Rendert das alt bekannte HTLM-Tag <form> -

    EditContext wird erstellt <EditForm></EditForm> Blazor WebAssembly Forms in Action Blazor Forms
  4. Blazor WebAssembly bietet von Haus aus eigene Input Felder -

    <InputText> - <InputDate> - <InputSelect> - … Hinweis: Übliche HTML-Tags wie <input /> können natürlich auch genutzt werden. <EditForm> <InputText /> <InputDate /> </EditForm> Blazor WebAssembly Forms in Action Forms
  5. Blazor WebAssembly Forms in Action Data Binding EditForm: Model <EditForm

    Model="Country"> <InputTextField /> ... </EditForm>
  6. Blazor WebAssembly Forms in Action Data Binding EditForm: EditContext <EditForm

    EditContext="_editContext"> </EditForm> public partial class Test { private EditContext _editContext; protected override void OnInitialized() { Country = new Country(); _editContext = new EditContext(Country); base.OnInitialized(); } }
  7. Blazor WebAssembly Forms in Action Data Binding @bind-Value - Property,

    die an das <input /> Feld gebunden werden soll - Two-Way-Binding <EditForm Model="@Model"> <InputText @bind-Value="Model.Person.City"/> </EditForm>
  8. Blazor WebAssembly Forms in Action Data Binding Value - One-Way

    Binding - ValueChanged: Reagieren auf Änderungen des Wertes - ValueExpression: Value Identifier <EditForm Model="@Model"> <InputSelect ValueExpression="@(() => Value.Id)" Value="Value.Id“ ValueChanged="@((Guid id) => CurrentValue = id)"> </InputSelect> </EditForm>
  9. DataAnnotations <DataAnnotationsValidator /> DataAnnotations Attribute zur Validierung der einzelnen Properties

    [Required] [Display(Description = "Benutzername")] [StringLength(100, ErrorMessage = "Der Name ist zu lang")] public string FirstName { get; set; } Blazor WebAssembly Forms in Action Validation
  10. FluentValidation - OpenSource NuGet Packages - FluentValidation - Accelist.FluentValidation.Blazor -

    Erstellen von eigenen Custom Validators - Eigene Regeln erstellen zum Validieren von Feldern - Möglichkeit Abhängigkeiten von Properties zu validieren - Dependency Injection Blazor WebAssembly Forms in Action Validation
  11. FluentValidation - Validator - Ableiten von Basisklasse: AbstractValidator<T> - Registrieren

    in der ServiceCollection - builder.Services.AddValidatorsFromAssemblyContaining< Program>(); - services.AddTransient<IValidator<T>, PersonValidator>(); - Tag: <FluentValidator /> Blazor WebAssembly Forms in Action Validation
  12. Blazor WebAssembly Forms in Action Erstes Rendern? || ShouldRender() DOM

    Event oninput, onclick, onblur,... Event Handler ausführen Render Component OnAfterRender/ OnAfterRenderAsync Render tree wird erstellt und an den DOM gesendet DOM Update Rendern wird beendet Nein Ja 1 2 3 4a 4b 5 6
  13. Auf was muss geachtet werden? - Nach jedem Event wie

    z.B. @onclick wird ein Re-Rendering getriggert - Wird wirklich bei jeder Änderung ein Re-Rendering benötigt? - Disable ShouldRender wenn möglich - foreach vs. Virtualize - Müssen alle Elemente direkt geladen werden? Blazor WebAssembly Forms in Action Performance
  14. - Blazor bietet viel von Haus aus, wie die EditForm,

    DataBinding und Input- Components - DataAnnotationValidation nimmt bereits viel in der klassischen Validierungsszenarien ab - FluentValidation ermöglicht Validierung von Sonderfällen und komplexen Abhänigkeiten - Aufpassen beim Rendern! Muss wirklich bei jedem Event neu gerendert werden? Blazor WebAssembly Forms in Action Resumé