Bài viết này sẽ giới thiệu về lập trình ASP.NET MVC, một mô hình lập trình ứng dụng web hiện đại. Mô hình này cho phép chia dự án thành các tầng - lớp khác nhau để dễ dàng bảo trì và mở rộng. Trong bài học đầu tiên về ASP.NET MVC, chúng ta sẽ tìm hiểu các khái niệm sau:
Tạo ứng dụng ASP.NET MVC đầu tiên
Một số khái quát chung
- Controller: Là một lớp C# mà bạn tự định nghĩa, kế thừa từ lớp
Microsoft.AspNetCore.Mvc.Controller
. Controller sẽ xử lý các truy vấn tới ứng dụng dựa trên URL truy cập và thu thập thông tin từ request. Mỗi action trong controller sẽ được thực thi để xử lý truy vấn và trả về response. - Action: Là các phương thức public trong controller. Action được gọi tự động dựa trên sự điều hướng của route trong ứng dụng. Action có thể trả về các kiểu triển khai từ
IActionResult
. - View: Là các file .cshtml chứa mã Razor. Mã Razor được sử dụng để tạo phần HTML của trang web. Các file view được tổ chức theo thư mục tương ứng với tên của controller. Ví dụ, controller có tên là "Home" thì các file view sẽ được đặt trong thư mục "/Views/Home".
Truy cập ứng dụng với HTTPS
Để truy cập ứng dụng sử dụng giao thức HTTPS, chúng ta cần cấu hình web server như Apache, Nginx, hoặc IIS. Trong môi trường phát triển, chúng ta có thể tự xác thực SSL bằng các lệnh sau:
dotnet dev-certs https -clean dotnet dev-certs https -trust
Sau đó, bạn có thể truy cập ứng dụng với địa chỉ https://localhost:5001
.
Route - Định tuyến trong ASP.NET MVC
Để định tuyến trong ASP.NET MVC, chúng ta có thể sử dụng các phương thức tạo điểm cuối trong EndpointMiddleware
với các phương thức như Map
, MapGet
, MapPost
,...
Đối với tạo điểm cuối dựa trên route, chúng ta có thể sử dụng IEndpointRouteBuilder.MapControllerRoute
. Cú pháp cơ bản như sau:
MapControllerRoute(string name, string pattern, object defaults = null, object constraints = null);
Ví dụ:
app.UseRouting(); app.UseEndpoints(endpoints => { endpoints.MapControllerRoute( name: "default", pattern: "{controller=Home}/{action=Index}/{id?}"); });
Trong ví dụ trên, chúng ta đã tạo một route ánh xạ URL vào controller. Mẫu route này xác định trong pattern là URL với cấu trúc /{controller}/{action}/{id?}
. Phần {controller}
tương ứng với tên của controller, phần {action}
tương ứng với tên của action trong controller, và phần {id?}
có thể có hoặc không - tùy chọn.
Tạo Controller trong ASP.NET MVC
Controller có chức năng nhận request và trả về response. Trong ASP.NET MVC, các controller được lưu trong thư mục Controllers và có hậu tố là Controller
.
Thông thường, các controller kế thừa từ lớp Controller
và khai báo các action (phương thức) trong đó. Ví dụ:
public class HomeController : Controller { public IActionResult Index() { return View(); } }
Truyền dữ liệu Controller tới View với ViewBag
Để truyền dữ liệu từ controller sang view, chúng ta có thể sử dụng ViewBag
, một thuộc tính kiểu dynamic trong ASP.NET MVC. Cú pháp như sau:
public IActionResult Index() { ViewBag.Key = value; return View(); }
Khi controller thiết lập dữ liệu qua ViewBag
, ta có thể truy cập vào dữ liệu này trong view thông qua thuộc tính ViewBag.key
.
Truyền dữ liệu Controller tới View với Model
Trong Razor, có một thuộc tính có tên Model
, kiểu generic, cho phép truyền dữ liệu từ controller sang view. Ví dụ:
public IActionResult Index() { List<string> sanpham = new List<string>() { "Bàn ăn", "Giường ngủ", "Tủ áo" }; return View(sanpham); }
Trong view, chúng ta có thể truy cập dữ liệu model thông qua thuộc tính Model
. Ví dụ:
@model List<string> @foreach (var sp in Model) { <li>@sp</li> }
Phát sinh controller, view, razor page, area
Để tạo nhanh các cấu trúc thư mục, controller, view, razor page, area, chúng ta có thể sử dụng công cụ aspnet-codegenerator
. Ví dụ:
# Tạo một area dotnet aspnet-codegenerator area NameArea # Tạo controller dotnet aspnet-codegenerator controller -name First -outDir Controllers # Tạo view dotnet aspnet-codegenerator view Index Empty -outDir Views/First -l _Layout -f
Trên đây là những khái niệm cơ bản về ASP.NET MVC. Hy vọng bạn đã hiểu được và có thể bắt đầu xây dựng ứng dụng web với ASP.NET MVC.
Mã nguồn ví dụ ASP_NET_CORE/mvc01_HelloWorld hoặc tải về ex053