'Razor Component vs Razor Page

In the menu of visual studio, there are two options, Razor Component, and Razor Page, If one adds @page directive on the top of the razor component, it has its own address.

So what is the difference between them in practice?

enter image description here



Solution 1:[1]

Introduction

When you start a dotnet web app, you can choose between several types of apps, among them, mvc, webapp and Blazor:

dani@localhost ~ $ dotnet new
Templates                                         Short Name               Language          Tags                  
--------------------------------------------      -------------------      ------------      ----------------------
Razor Page                                        page                     [C#]              Web/ASP.NET           
...
Blazor Server App                                 blazorserver             [C#]              Web/Blazor            
Blazor WebAssembly App                            blazorwasm               [C#]              Web/Blazor/WebAssembly
...
ASP.NET Core Web App (Model-View-Controller)      mvc                      [C#], F#          Web/MVC               
ASP.NET Core Web App                              webapp                   [C#]              Web/MVC/Razor Pages   
...

If you create a webapp you can see razor pages:

dani@localhost pp2 $ tree
.
??? appsettings.Development.json
??? appsettings.json
??? obj
?   ??? ...
??? Pages
?   ??? Error.cshtml                <-- Razor Page
?   ??? Error.cshtml.cs             <-- Razor Page
?   ??? Index.cshtml
?   ??? Index.cshtml.cs
?   ??? Privacy.cshtml
?   ??? Privacy.cshtml.cs
?   ??? Shared
?   ?   ??? _Layout.cshtml
?   ?   ??? _ValidationScriptsPartial.cshtml
?   ??? _ViewImports.cshtml
?   ??? _ViewStart.cshtml
??? ...

Quoting Introduction to Razor Pages in ASP.NET Core:

Razor Pages can make coding page-focused scenarios easier and more productive than using controllers and views.

As you can see on tree structure, a razor page is a cshtmlfile (template) plus acs` file (behavior). The page is rendered as html and send to navigator.

Exists another kind of apps, blazor. Quoting Introduction to ASP.NET Core Blazor:

Blazor is a framework for building interactive client-side web UI with .NET

Important term "interactive", not only render html, is a language to make page interactive (no just render html on server and send it to client)

Razor Component vs Razor Page

  • Razor page is tipically to generate an html page on server and send to client on a ASP.NET Core Web App
  • Razor component ("Blazor Component") is a component for a Blazor app (can run in Blazor Server App and also in Blazor WebAssembly App) intended for interactive usage.

Notes

Solution 2:[2]

Razor Component is the illogical template name for a Blazor Component, in a .razor file.

A Blazor Page is a Blazor Component (.razor) that has a @page "/..." directive.

Note that the icons are correct. Just go for the purple Bl@zor thing.

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1
Solution 2