Blazor ◀▶ JavaScript: JSON serialisieren und als Datei auf einem lokalen Datenträger speichern.
In diesem Artikel gehe ich darauf ein wie man aus dem WebAssembly Kontext aus eine JavaScript Funktion mit C# aufruft und ihr dabei Parameter übergibt.
Blazor ist ein von Microsoft entwickeltes Framework zur Erstellung von Web Applikationen, die entweder großteilig serverseitig mithilfe einer .Net Laufzeitumgebung oder aber vollständig auf dem Client mittels WebAssembly ausgeführt werden. Dabei wird das HTML Markup mit C# gemixt.
Diesen Ansatz finde ich spannend, da es den Einstieg in WebAssembly unglaublich erleichtert. Für die Entwicklung etwas Vergleichbarem müsste man dann schon die Entsprechenden Code-Abschnitte in C / C++ oder Rust schreiben.
Wir möchten JSON serialisieren und als Datei auf einem lokalen Datenträger speichern. Ein fast schon klassischer Lösungsansatz wäre das Erstellen der JSON - Datei vom Server erledigen zulassen. Man sendet die Eingaben vom Formular in einem HTTP POST Request (Anfrage) zum Server. Der erstellt ein Objekt daraus, serialisiert es und sendet es als Response (Antwort) zum Client zurück. Wie der Browser darauf reagiert ist abhängig vom JavaScript des Frontends und der im Header mit gesendeten Kodierung des Response.
Allerdings möchte ich das nach Möglichkeit komplett vom Browser erledigen lassen und vergessen dabei auch kurz, dass wir sowas auch nur in JavaScript schreiben könnten.
Es soll beispielhaft zur Erläuterung der Schnittstelle zwischen den beiden Sprachen dienen.
Das Setup
Ich habe als Projekt - Template "Blazor-Webassembly-App" mit der Option "ASP .NET gehostet" gewählt. Rein prinzipiell könnt ihr auch auf diese Option verzichten.
Der Blazor - Part
Sollte das Injecten von IJSRuntime
Probleme bereiten, dann überprüfe bitte ob das TargetFramework
in der Datei Client/[PROJEKTNAME].Client.csproj auf "net5.0" eingestellt ist.
Und das JavaScript
Relevant sind nur die beiden Script - Elemente. Das mit der nötigen Funktion muss vor _framework/blazor.webassembly.js
eingebunden werden. Und beide werden an das Ende vom Body Element geparkt. Das hat den Hintergrund dass das DOM (Document Object Model | Die Struktur der Elemente des HTML Dokuments) geladen und gerendert wurde bevor JavaScript ausgeführt wird. Dadurch wird das potenzielle initiale Blockieren vom Rendervorgang verhindert.