Neues für Blazor in .NET 11

Neues für Blazor in .NET 11

- Matt

Wer die .NET-11-Preview-Notizen verfolgt, liest vor allem über runtime-native async und neue Sprachfeatures. Blazor taucht seltener in den Überschriften auf, sammelt seit Preview 1 aber genug kleine Verbesserungen an, die im Alltag mit einer Server- oder WebAssembly-App direkt spürbar sind.

NavigationManager.NavigateTo() und die NavLink-Komponente bekommen einen neuen Parameter RelativeToCurrentUri. Bisher waren relative Ziele immer relativ zur App-Basis-URL aufgelöst worden, was in verschachtelten Routen-Strukturen zu Pfaden führte, die man erst im Kopf zusammenrechnen musste. Mit RelativeToCurrentUri="true" zählt stattdessen die aktuelle Seite als Ausgangspunkt - praktisch für Komponenten, die an beliebiger Stelle im Routenbaum eingebunden werden und trotzdem relativ zu ihrem eigenen Ast navigieren sollen.

QuickGrid: klickbare Zeilen, Sortierung in der URL

QuickGrid bekommt einen OnRowClick-Callback samt automatischem Zeiger-Cursor, sodass man für einen simplen “Zeile anklicken öffnet Detailansicht”-Fall keinen eigenen Klick-Handler pro Zelle mehr braucht. Wichtiger ist die zweite Änderung: Sortierung und Seitenzahl landen jetzt standardmäßig in der URL statt nur im Komponentenzustand, auch bei statisch gerenderten Seiten. Das macht Grid-Zustände teilbar und überlebt einen Reload.

Der Haken dabei: Mehrere Grids auf einer Seite, die bisher stillschweigend mit derselben PaginationState funktioniert haben, brauchen jetzt zwingend unterschiedliche QueryParameterNamePrefix-Werte. Sonst überschreibt das zuletzt gerenderte Grid den Query-Parameter des anderen, und die Paginierung liest plötzlich vom falschen Parameter. Wer mehrere QuickGrid-Instanzen auf einer Seite hat, sollte das beim Umstieg gezielt prüfen.

Validierung nähert sich MVC an

Statisch serverseitig gerenderte Formulare bekommen clientseitiges Validierungsfeedback, ohne dass dafür ein Server-Roundtrip nötig ist - die Regeln bleiben serverseitig definiert, ihre Metadaten werden nur zusätzlich im Browser ausgewertet. Das ergänzt, was ich im Beitrag zu TempData und statischem SSR schon beschrieben hatte.

Neu sind außerdem die Bausteine für asynchrone Validierung: AsyncValidationAttribute und IAsyncValidatableObject erlauben Regeln, die eine Datenbank oder einen externen Dienst befragen, etwa eine Eindeutigkeitsprüfung für E-Mail-Adressen. In interaktiven Rendering-Modi lassen sich solche Prüfungen über EditContext.AddValidationTask registrieren, inklusive Statusabfrage per IsValidationPending.

Was noch nicht fertig ist

Ein Teil davon ist noch im Fluss. Die asynchrone Validierung ist laut Preview-Notizen bewusst nur als Grundgerüst angelegt - die vollständige Unterstützung durch DataAnnotationsValidator folgt erst in einer späteren Preview. Auch der neue Gateway-Entwicklungsserver für eigenständige WebAssembly-Apps, der den bisherigen DevServer ersetzen soll, liegt aktuell nur als eigenes Preview-Paket vor. Wer produktiv unterwegs ist, sollte ohnehin erst zur finalen Version wechseln - Details zu Breaking Changes habe ich separat gesammelt.