Bài 1: Giới thiệu về Trình quản lý quảng cáo

TRUYỀN DỮ LIỆU HIỆU QUẢ GIỮA CONTROLLER, VIEW VÀ MODEL


🟢 PHẦN 1. TRUYỀN DỮ LIỆU TỪ CONTROLLER SANG VIEW

🎯 1.1 Tổng quan

Cách truyền Ưu điểm Nhược điểm Khi dùng
Model Mạnh kiểu, IntelliSense Phải định nghĩa class Truyền dữ liệu chính
ViewBag Nhanh, dynamic Không kiểm tra kiểu Dữ liệu phụ nhỏ
ViewData Dictionary, giống ViewBag Không gợi ý code Dữ liệu phụ nhỏ
TempData Qua redirect Chỉ dùng 1 lần Thông báo sau redirect

🚀 1.2 Dùng Model (phổ biến nhất)

➕ Controller

public IActionResult Index()
{
    var products = new List<string> { "Laptop", "Phone", "Tablet" };
    return View(products);
}

➕ View

@model List<string>
<h2>Products</h2>
<ul>
@foreach (var item in Model)
{
    <li>@item</li>
}
</ul>

✅ An toàn, gợi ý code, dễ bảo trì.

🔥 1.3 Dùng ViewBag

➕ Controller

public IActionResult About()
{
    ViewBag.Message = "This is About Page.";
    return View();
}

➕ View

<h2>@ViewBag.Message</h2>

✅ Nhanh, dynamic.

🔥 1.4 Dùng ViewData

public IActionResult Contact()
{
    ViewData["Email"] = "support@example.com";
    return View();
}
<p>Contact us: @ViewData["Email"]</p>

🔥 1.5 Dùng TempData

public IActionResult Save()
{
    TempData["Notice"] = "Saved successfully!";
    return RedirectToAction("Index");
}

public IActionResult Index()
{
    return View();
}

Trong View:

@if (TempData["Notice"] != null)
{
    <div>@TempData["Notice"]</div>
}

✅ Giữ qua redirect.

🚀 1.6 Kết hợp ViewModel chuyên nghiệp

➕ Tạo Model

public class ProductViewModel
{
    public int Id { get; set; }
    public string Name { get; set; }
}

➕ Controller

public IActionResult Index()
{
    var products = new List<ProductViewModel>
    {
        new ProductViewModel { Id = 1, Name = "Laptop" },
        new ProductViewModel { Id = 2, Name = "Phone" }
    };
    return View(products);
}

➕ View

@model List<ProductViewModel>
<ul>
@foreach (var p in Model)
{
    <li>@p.Id - @p.Name</li>
}
</ul>

🟠 PHẦN 2. TRUYỀN DỮ LIỆU TỪ VIEW LÊN CONTROLLER

🎯 2.1 Tổng quan

Cách gửi dữ liệu Ví dụ URL Controller nhận
Route /Product/Details/5 Details(int id)
Query /Product/Search?key=abc Search(string key)

🚀 2.2 Truyền qua Route Parameter

➕ Controller

public IActionResult Details(int id)
{
    ViewBag.ProductId = id;
    return View();
}

➕ View (thẻ <a>)

<a href="/Product/Details/5">Xem chi tiết 5</a>

➕ Hoặc ActionLink

@Html.ActionLink("Xem 5", "Details", "Product", new { id = 5 }, null)

🚀 2.3 Truyền qua Query String

➕ Controller

public IActionResult Search(string keyword)
{
    ViewBag.Keyword = keyword;
    return View();
}

➕ View

<a href="/Product/Search?keyword=laptop">Tìm Laptop</a>

🚀 2.4 Kết hợp Route & Query

public IActionResult Filter(string category, int page = 1)
{
    ViewBag.Category = category;
    ViewBag.Page = page;
    return View();
}

Truy cập:

/Product/Filter?category=electronics&page=2

🚦 2.5 Custom route cho URL thân thiện

➕ Ví dụ Route Attribute

[Route("about-us")]
public IActionResult About()
{
    return View();
}

➡ URL /about-us tự động gọi action About.

✅ Tóm tắt

Từ đâu → Đến đâu Dữ liệu gì Khi nào
Controller → View ViewModel, ViewBag, ViewData, TempData Render trang
View → Controller Route, Query String Click link, route điều hướng
 

Bài tập số 6: WebDaoTao

Yêu cầu:

  • Thực hành lại với Controller Khóa Học.

  • Tạo Controller Tin Tức và thực hành các cách truyền dữ liệu đã học, tương tự như phần Khóa Học.

- View TinHot: Truyền dạng list tin tức sang view bằng ViewBag

- View TinMoi: Truyền dạng list tin tức sang view bằng Model 

Nộp bài:

  • Nén project đã làm và nộp file.