I wanted to take a default asp.net core MVC project in Visual Studio and then see if I could added Razor pages support and use them both.
I created an MVC project and compared it to a new razor project. Using insight from a stack overflow article "How to extend an ASP.NET Core MVC project by Razor Pages?", I was able to successfully do just that.
Here is how
Using Visual Studio
The folder structure of the result:
Do F5 (or CTRL+F5) and you get the standard MVC rendered web pages and web app.
[x] Add a new folder to the project and name it
Pages
This is a Razor convention. Other helpful Razor information at the MS Docs site.
[x] Add the line
services.AddRazorPages();
in
public void ConfigureServices(IServiceCollection services)
- [x] Add the line
endpoints.MapRazorPages();
to
app.UseEndpoints(endpoints =>
in
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
At this point, a Razor page can be added and can be navigated to:
- [x] Add a new Razor page
results in:
basic page code:
rendered view:
Layout
So now one may wish to use the existing layout options with the new razor pages.
- [x] Copy the
_ViewStart.cshtml
file from the>Views
folder to the>Pages
folder.
That will result in the following rendered html:
IF you do not copy the _ViewStart.cshtml
file to the >Pages
folder, you CAN selectively apply the layout to a individual Razor files by adding the tag to page:
Navigation
MVC
<a class="nav-link text-dark" asp-area="" asp-controller="Home" asp-action="Privacy">Privacy</a>
vs
Razor
<a class="nav-link text-dark" asp-area="" asp-page="/HelloWorld">Hello Razor</a>
I create this for my own reference and hopefully others will also find it helpful.
Top comments (4)
Thank you :-)
Very thank you! Helped me! But in new .NET version you can just use builder.Services.AddRazorPages() and app.MapRazorPages() in Program.cs if you already created an MVC project
P.S. I am beginner, can be wrong
This is exactly what I needed! I forgot to map the endpoints for Razor Pages and was at a loss
This really helped, it's exactly what I needed to know, and it worked perfectly. Thanks!