ASP.NET Core MVC Views
Views are a fundamental part of the Model-View-Controller (MVC) architectural pattern. In ASP.NET Core, views are responsible for presenting data to the user. They are typically written using the Razor view engine, which allows you to embed C# code within HTML.
Understanding the Role of Views
Views receive data from controllers and render it as HTML, JavaScript, or other output formats. They should focus solely on presentation and avoid complex business logic.
Razor View Engine
The Razor view engine is the primary templating engine for ASP.NET Core MVC. It provides a concise syntax for embedding server-side code within HTML markup. Razor files have the .cshtml
extension.
Basic Razor Syntax
You can embed C# code within Razor views using the @
symbol:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>@ViewData["Title"] - My App</title>
</head>
<body>
<h1>Hello, @Model.Name!</h1>
<p>Current time: @DateTime.Now.ToString("HH:mm:ss")</p>
<!-- Conditional rendering -->
@if (Model.IsAdmin) {
<p>Welcome, Administrator!</p>
} else {
<p>Welcome, User.</p>
}
<!-- Looping through a list -->
<ul>
@foreach (var item in Model.Items) {
<li>@item</li>
}
</ul>
</body>
</html>
Types of Views
- Layout Views: Define the overall structure and consistent elements (like headers, footers, navigation) of your application.
- Partial Views: Reusable chunks of HTML that can be rendered independently or within other views.
- View Components: Similar to partial views but can be invoked directly from controllers or Razor code, offering more power and encapsulation.
Layout Views
Layout files (typically located in Views/Shared
) define the consistent look and feel of your application. They contain a placeholder (@RenderBody()
) where the content of individual views is injected.
_ViewStart.cshtml
.
Partial Views
Partial views are useful for breaking down complex views into smaller, manageable units or for rendering content that appears in multiple places.
@* In your main view *@
<div class="sidebar-content">
@await Html.PartialAsync("_SidebarNav")
</div>
@* _SidebarNav.cshtml *@
<h3>Navigation</h3>
<ul>
<li><a href="#">Link 1</a></li>
<li><a href="#">Link 2</a></li>
</ul>
View Data and View Bags
Controllers pass data to views using ViewData
and ViewBag
. Both are dictionaries, but ViewBag
provides a more dynamic way to access properties.
ViewBag
can make code harder to maintain and refactor due to its dynamic nature and lack of compile-time checking. Prefer using strongly-typed models when possible.
Using ViewData
// In Controller
ViewData["Message"] = "Welcome to the application!";
// In View (.cshtml)
<p>@ViewData["Message"]</p>
Using ViewBag
// In Controller
ViewBag.PageTitle = "About Us";
// In View (.cshtml)
<h1>@ViewBag.PageTitle</h1>
Tag Helpers
Tag Helpers enable server-side code to participate in creating and rendering HTML elements in Razor files. They allow you to write HTML-like tags that are translated into server-side code.
<!-- Instead of: -->
<a href="/products/details/123">Product Details</a>
<!-- Use the Anchor Tag Helper: -->
<a asp-controller="Products" asp-action="Details" asp-route-id="123">Product Details</a>
Common Tag Helpers include <form>
, <input>
, <label>
, and <a>
.
Mastering ASP.NET Core MVC views is crucial for building dynamic and interactive web applications. By leveraging Razor syntax, layout, partial views, and tag helpers, you can create maintainable and efficient user interfaces.