Razor Components (Server-Side Blazor) Refined in ASP.NET Core Preview
Or, as Microsoft said in an announcement yesterday, Razor Components, introduced in an earlier preview, provide "a new way to build interactive client-side Web UI with ASP.NET Core."
While the experimental Blazor project started off as more of a full-stack approach with client-side and server-side components, the client-side effort ran into problems in getting C# to play nice on the Web with WebAssembly, yet another experimental project that facilitates the development of Web apps with C# and other higher-level languages.
As the client-side team continues to work on those problems, the server-side effort was dubbed Razor Components and moved to be an integral part of ASP.NET Core.
In the new Preview 3, Razor Components received many improvements, described by Microsoft as:
- Single project template: The Razor Components project template is now a single project instead of two projects in the same solution.
- New .razor extension: To clarify which Razor files should be compiled as Razor Components, Microsoft introduced a new file extension: .razor.
- Endpoint routing integration: Razor Components are now integrated into ASP.NET Core's new Endpoint Routing system.
- Prerendering: The Razor Components project template now does server-side prerendering by default, so when a user navigates to an application, the server will perform an initial render of Razor Components and deliver the result to their browser as plain static HTML. Then, the browser will reconnect to the server via SignalR and switch the Razor Components into a fully interactive mode.
- Razor Components in Razor Class Libraries: Developers can now add Razor Components to Razor Class Libraries and reference them from ASP.NET Core projects using Razor Components.
- Improved event handling: The new EventCallback and EventCallback<> types make defining component callbacks much more straightforward.
- Forms and validation: This preview release adds built-in components and infrastructure for handling forms and validation.
Regarding the ability to add Razor Components to Razor Class Libraries and reference them from ASP.NET Core projects using Razor Components, Microsoft added one caveat: "Note that Razor Class Libraries are not compatible with Blazor apps in this release. Also, Razor Class Libraries do not yet support static assets. To create components in a library that can be shared with Blazor and Razor Components apps you still need to use a Blazor Class Library. This is something we expect to address in a future update."
Features other than Razor Components also received their share of improvements, including:
- Runtime compilation
- Worker Service template
- gRPC template
- Angular template updated to Angular 7
- Authentication for Single Page Applications
- SignalR integration with endpoint routing
- SignalR Java client support for long polling
All of the above are explained in detail in the release notes.
In announcing .NET Core 3.0 Preview 3, Microsoft announced that .NET Core 3.0 would not be shipping with Visual Studio 2019 when it's released on April 2. Rather, it will ship in the second half of the year, with the exact date to announced during Microsoft's Build conference in early May.
David Ramel is the editor of Visual Studio Magazine.