Umstieg auf .NET Core, Teil 3: ASP.NET-Webserveranwendungen umstellen

Seite 4: Webserver-API-Änderungen

Inhaltsverzeichnis

In den beiden Code-Behind-Dateien sieht man geringere Unterschiede als bei der Vorlage, weil auch schon die Webforms-Implementierung mit Microsofts Objekt-Relationalem Mapper Entity Framework Core arbeitet. In der Regel haben ältere Webforms-Projekte aber eine ältere Datenzugriffstechnik. Deren Umstellung ist ein Thema in einem weiteren Teil dieser Serie.

Die im Beispiel sichtbaren Unterschiede in den Code-Behind-Dateien sind:

  • In Webforms wird das Ereignis Page_Load() bei jedem HTTP-Aufruf gefeuert, also zum Beispiel auch noch jede Änderung einer der Auswahllisten. Daher prüft man mit if (!Page.IsPostBack) { … }, ob es sich um den ersten Aufruf oder einen Folgeaufruf handelt. In Blazor wird OnInitialized() nur einmalig beim ersten Aufruf der Seite gefeuert. Danach eingehende Websocket-Nachrichten feuern das Ereignis nicht mehr.
  • In ASP.NET Webforms steht das aktuelle HttpContext-Objekt als eingebautes Objekt via HttpContext.Current zur Verfügung. In Blazor muss wie in ASP.NET Core üblich das Objekt per Dependency Injection beschafft werden.
  • Die Klassen für den Abruf der Browser- und Webserverversionsinformationen haben sich geändert.
  • In Webforms erfolgt die Datenübergabe an die Vorlagenseite per Datenbindung über das Befüllen des Attributs .DataSource und den Aufruf der Methode .DataBind(). In Blazor füllt man hingegen Attribute der Klasse mit den Daten, über die Daten in der Razor-Syntax mit @foreach(…) { … } iteriert werden muss beziehungsweise die mit @bind an die aktuellen Werte des Steuerelements gebunden werden.
  • In Webforms haben die Steuerelemente vordefinierte Ereignisse, die man in der Code-Behind-Datei mit Ereignisbehandlungsroutinen mit entsprechenden Methodensignaturen behandeln kann. In Blazor lassen sich beliebige Methoden an die Standardereignisse in den HTML-Elementen binden.
  • In Webforms kann man JavaScript in die HTML-Seite einstreuen. In Blazor erfolgt der Aufruf von JavaScript für die Rückbestätigung beim Löschen in der Code-Behind-Datei über eine per Dependency Injection gelieferte Instanz der Klasse, die die Schnittstelle IJSRuntime implementiert.

Die zahlreichen Änderungen sowohl an der Benutzerschnittstellenbeschreibung als auch an der Benutzerschnittstellensteuerung zeigen bereits in diesem sehr einfachen Beispiel sehr deutlich den nicht unerheblichen Aufwand eines Wechsels von Webforms auf Blazor. Bei einer Migration auf ASP.NET Core Razor Pages wäre der Aufwand ähnlich, bei ASP.NET Core MVC noch ein klein wenig höher.

In der Praxis gibt es viele Tabellenausgaben mit Sortier-, Gruppier- und Editierfunktionen sowie Detailansichten. Deren Neuprogrammierung ist noch deutlich aufwändiger, kann hier aber aus Platzgründen nicht näher behandelt werden.