ASP.NET: Web Forms vs MVC vs Razor Pages
ASP.NET offers several models for building web applications, and beginners often confuse them. In short: Web Forms is the original, event-driven model from the early 2000s and is now legacy — it only runs on the old Windows-only .NET Framework, not on modern .NET. MVC (Model-View-Controller) and Razor Pages are the two modern, cross-platform models in ASP.NET Core. MVC separates code into controllers, models, and views; Razor Pages groups a page's logic with its markup. For new projects you should choose MVC or Razor Pages.
Web Forms — legacy, do not start here
Web Forms used draggable server controls and an event model (Button_Click) that hid the underlying HTTP request. It relied on "ViewState" to remember page state. It runs only on the legacy .NET Framework (4.x), Windows-only, and Microsoft does not bring it to modern .NET. You may meet it while maintaining old applications, but never start a new project with Web Forms. Learn it only if a job requires maintaining existing code.
MVC — structured separation of concerns
MVC splits an app into three roles:
- Model — the data and business rules.
- View — the HTML template shown to the user.
- Controller — receives a request, runs logic, and picks a view.
// A controller in ASP.NET Core MVC.
public class StudentsController : Controller
{
// Handles GET /Students
public IActionResult Index()
{
// Build the data (the "model").
var students = new[] { "Asha", "Rohan", "Meera" };
// Pass it to a view named "Index.cshtml" for rendering.
return View(students);
}
}
The matching view (Views/Students/Index.cshtml) uses Razor syntax to render the model:
@model string[]
<ul>
@foreach (var name in Model) @* loop over the data passed in *@
{
<li>@name</li>
}
</ul>
MVC shines in large applications with many endpoints, shared layouts, and teams that benefit from a clear structure.
Want to learn this properly?
Join the waitlist for our courses — beginner-friendly, project-first classes in Jalgaon.
Browse coursesRazor Pages — page-focused and simpler
Razor Pages keeps a page's markup and its logic together, which is often simpler for page-centric sites. Each page has a .cshtml file and a .cshtml.cs "code-behind" class:
// Students.cshtml.cs — the page model class.
public class StudentsModel : PageModel
{
public string[] Students { get; private set; } = Array.Empty<string>();
// Runs when the page is requested with GET.
public void OnGet()
{
Students = new[] { "Asha", "Rohan", "Meera" };
}
}
@page
@model StudentsModel
<ul>
@foreach (var name in Model.Students)
{
<li>@name</li>
}
</ul>
Razor Pages is the recommended starting point for new server-rendered web UIs in ASP.NET Core because it has less ceremony than MVC.
How to choose
| Model | Status | Best for |
|---|---|---|
| Web Forms | Legacy (Framework only) | Maintaining old apps only |
| MVC | Modern (ASP.NET Core) | Large apps, APIs, teams wanting strict separation |
| Razor Pages | Modern (ASP.NET Core) | Page-centric sites; simplest start for server-rendered UI |
For pure JSON backends (no HTML), use Minimal APIs or MVC controllers. Both MVC and Razor Pages share the same Razor view engine and run side by side in one app.
Common mistakes
- Picking Web Forms for new work. It is legacy and not on modern .NET. Choose Razor Pages or MVC.
- Thinking MVC and Razor Pages are incompatible. They live happily in the same ASP.NET Core project and share Razor.
- Confusing "Razor" with "Razor Pages". Razor is the templating syntax (
@); Razor Pages is a page-based framework that uses Razor. MVC views also use Razor. - Overcomplicating a small site with full MVC. For a handful of pages, Razor Pages is usually less work.
FAQ
Is MVC outdated? No. ASP.NET Core MVC is modern and widely used. Only Web Forms is the legacy model.
Which should a beginner learn first? Razor Pages for the gentlest start, then MVC to understand controllers and routing in depth.
Keep learning
- Hub: Learn .NET
- Previous: Introduction to ASP.NET Core
- Related: .NET Developer Roadmap
Build modern web apps with guidance in Jalgaon — join the waitlist for the Infoplanet .NET course at /courses/dotnet.
Want to learn this properly?
Join the waitlist for our courses — beginner-friendly, project-first classes in Jalgaon.
Browse coursesFounder, Infoplanet
Atul Kabra founded Infoplanet in 2001 and has spent over two decades teaching programming — C, C++, Java, databases and more — to students across Maharashtra.
Related guides
Data Access with ADO.NET
Connect to and query a database from C# with ADO.NET — connections, commands, parameterized queries, and data readers — written safely with using blocks.
Introduction to ASP.NET Core
Understand ASP.NET Core — the modern, cross-platform web framework for .NET — and build your first minimal web API with routing and JSON responses.
C# Basics for Beginners
Learn the building blocks of C# — variables, output, input, operators, and basic control flow — with beginner-friendly commented examples on modern .NET.
