Partial View là gì?
Partial view là một Razor markup file (.cshtml) không có directive @page, dùng để render HTML output bên trong output của một markup file khác.
Trong MVC, markup files được gọi là views; trong Razor Pages, chúng được gọi là pages. Thuật ngữ “partial view” dùng chung cho cả hai.
Khi nào nên dùng Partial Views
Partial views hiệu quả trong các trường hợp:Không nên dùng Partial Views khi
- Duy trì layout chung → Dùng
_Layout.cshtml - Cần logic phức tạp hoặc code execution để render → Dùng View Component
Khai báo Partial View
Một partial view là file.cshtml không có @page directive, nằm trong thư mục Views (MVC) hoặc Pages (Razor Pages).
Quy ước đặt tên
Tên file partial view thường bắt đầu bằng dấu gạch dưới_. Quy ước này không bắt buộc nhưng giúp phân biệt trực quan partial views với views và pages.
Lưu ý: Không giống MVC view rendering, partial view không chạy _ViewStart.cshtml.
Tham chiếu Partial View
Có nhiều cách để tham chiếu partial view trong markup file. Khuyến nghị dùng cách async.1. Partial Tag Helper (Khuyến nghị)
Partial Tag Helper render content asynchronously và sử dụng syntax giống HTML. Yêu cầu ASP.NET Core 2.1+.Tham chiếu từ app root
Tham chiếu bằng relative path
2. HTML Helper — Async (Khuyến nghị)
DùngPartialAsync trả về IHtmlContent wrapped trong Task. Phải prefix với @:
Tham chiếu từ app root
Tham chiếu bằng relative path
3. HTML Helper — Render Async
RenderPartialAsync streams rendered output trực tiếp đến response, không trả về IHtmlContent. Phải gọi trong Razor code block:
RenderPartialAsync có hiệu năng tốt hơn trong một số scenario vì không buffer kết quả. Benchmark để chọn cách phù hợp.
4. HTML Helper — Sync (Không khuyến nghị)
Partial và RenderPartial là phiên bản synchronous. Không khuyến nghị vì có thể gây deadlock.
Cảnh báo: Visual Studio sẽ cảnh báo khi dùngPartial: “Use of IHtmlHelper.Partial may result in application deadlocks. Consider using<partial>Tag Helper or IHtmlHelper.PartialAsync.”
Partial View Discovery
Khi partial view được tham chiếu mà không có extension, thứ tự tìm kiếm như sau:MVC
Quy ước quan trọng
- Partial views cùng tên nhưng khác folder → được phép
- Khi tìm không có extension: nếu partial view tồn tại ở cả caller folder và Shared folder → partial ở caller folder được ưu tiên
- Partial views có thể chuỗi (partial gọi partial khác), miễn không tạo circular reference
- Relative paths luôn relative với current file, không phải root
Lưu ý: Razor section định nghĩa trong partial view không thấy được bởi parent markup file. Section chỉ visible trong partial view nó được định nghĩa.
Truyền dữ liệu đến Partial Views
ViewData
Khi partial view được khởi tạo, nó nhận bản sao củaViewData dictionary từ parent. Thay đổi trong partial view không ảnh hưởng parent view.