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)
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
Thank you :-)
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!