Razor Pages vs server-side Blazor

Razor Components, as they are named, are for creating reusable components for web pages.

Razor pages are the combination of a web page and a controller in a single file.

Razor components are primarily used by Blazor but they can also be used within Razor Pages, although they are designed to be more native to Blazor.

You can't display a Razor Component without a page to host it, but you can display Razor Pages without Razor components.

Razor Components are available from .NET Core 3.0 onwards.

Razor Pages are available from .NET Core 2.1 onwards.


RazorPages are split between an HTML page and a .cs code file. Whereas Razor Components usually have the .cs and HTML in a single file, although they can be separated into HTML and a Code Behind file.

The PageModel for a Razor Page allows ASP.NET Core to bind the data returned by the controller to a public property in the page and then use that property within your page to reference the model. You use the property in the PageModel class to reference the data in the code and use the @model property within the HTML to reference the same properties.

Razor Components do not bind to a model but you assign values to them using parameters, similar to how you assign values and events to a standard HTML element. An example of this can be seen here.

Biggest difference is that razor pages renders on the server and sends whole pages to the client. Blazor server-side only sends the DOM changes over a signalr connection. So there are no page reloads. You need asp.net core running on the server for this technique.

Blazor webassembly is totally client side. Changes to the DOM are applied 'locally', this can be hosted from a static webserver.

But what is the difference between Razor Pages and Razor components?

Blazor has some confusing naming issues.

Blazor is not Razor but Blazor pages/components are packed in .razor files. Razor uses .cshtml files.

Blazor components can be used on a Razor page.

Blazor server side was briefly named "Razor Components" but that was rolled back.

I am simply trying to figure out which technical differences there are.

Razor pages are a lightweight MVC branch that generates HTML on the server.

Blazor is a component framework that can run directly in the Browser (WebAssembly) or run on the server. In both cases it renders small updates to the Browser DOM.