C# Cơ bản .NET Core §1 Cài đặt, chương trình C# đầu tiên §2 Biến, kiểu dữ liệu và nhập/xuất §3 Toán tử số học và gán §4 So sánh, logic và lệnh if, switch §5 Vòng lặp for, while §6 Phương thức - Method §7 Phương thức - Delegate §8 Lớp - Class §9 Namespace §10 Partial, Nested §11 Kiểu giá trị, tham chiếu §12 Kiểu vô danh và dynamic §13 Biểu thức lambda §14 Event §15 Hàm hủy - Quá tải toán tử - thành viên tĩnh - indexer §16 null và nullable §17 Mảng §18 Chuỗi ký tự §19 Tính kế thừa §20 Phương thức khởi tạo §21 Tính đa hình - abstract - interface §22 Struct và Enum §23 Ngoại lệ Exeption §24 IDisposable - using §25 File cơ bản §26 FileStream §27 Generic §28 Collection - List §29 SortedList §30 Queue / Stack §31 Linkedlist §32 Dictionary - HashSet §33 Phương thức mở rộng §34 ObservableCollection §35 LINQ §36 (Multithreading) async - bất đồng bộ §37 Type §38 Attribute Annotation §39 DI Dependency Injection §40 (Multithreading) Parallel §41 Thư viện lớp §42 (Networking) HttpClient §43 (Networking) HttpMessageHandler §44 (Networking) HttpListener §45 (Networking) Tcp TcpListenerr/TcpClient §46 (ADO.NET) SqlConnection §47 (ADO.NET) SqlCommand §48 (EF Core) Tổng quan §49 (EF Core) Tạo Model §50 (EF Core) Fluent API §51 (EF Core) Query §52 (EF Core) Scaffold §53 (EF Core) Migration §54 (ASP.NET CORE) Hello World! §55 (ASP.NET CORE) Middleware §56 (ASP.NET CORE) Map - Request - Response §57 (ASP.NET CORE) IServiceCollection - MapWhen §58 (ASP.NET CORE) Session - ISession §59 (ASP.NET CORE) Configuration §60 (ASP.NET CORE) Gửi Mail §61 (ASP.NET CORE) SASS/SCSS §62 (ASP.NET CORE) LibMan §63 (ASP.NET RAZOR) Khởi tạo và Route §64 (ASP.NET RAZOR) Cú pháp Razor §65 (ASP.NET RAZOR) Layout trong ASP.NET Core §66 (ASP.NET RAZOR) Partial §67 (ASP.NET RAZOR) ViewComponent §68 (ASP.NET RAZOR) TagHelper §69 (ASP.NET RAZOR) PageModel §70 (ASP.NET RAZOR) Model Binding §71 (ASP.NET RAZOR) HTML Form, Validation §72 (ASP.NET RAZOR) Upload File §73 (ASP.NET RAZOR) HtmlHelper §74 (ASP.NET RAZOR) Entity Framework §75 (ASP.NET RAZOR) Paging §76 (ASP.NET RAZOR) Identity (1) - Register, Login, Logout §77 (ASP.NET RAZOR) Identity (2) Lockout, Reset Password §78 (ASP.NET RAZOR) Identity (3) Google Login §79 (ASP.NET RAZOR) Identity (4) Facebook Login §80 (ASP.NET RAZOR) Identity (5) profile, password, email ... §81 (ASP.NET RAZOR) Identity (6) Role §82 (ASP.NET RAZOR) Identity (7) Role-based Authorization §83 (ASP.NET RAZOR) Identity (8) RoleClaim §84 (ASP.NET RAZOR) Identity (9) Authorization Handler §85 (ASP.NET RAZOR) IAuthorizationService §86 (ASP.NET MVC) Controller - View §87 (ASP.NET MVC) Route §88 (ASP.NET MVC) EF, Identity §89 (ASP.NET MVC) Binding, Validation §90 (ASP.NET MVC) Xây dựng Website(1) §91 (ASP.NET MVC) Xây dựng Website(2) §92 (ASP.NET MVC) Xây dựng Website(3) §93 (ASP.NET MVC) Xây dựng Website(4) §94 (ASP.NET MVC) Giỏ hàng - Cart (5) §95 (ASP.NET MVC) elFinder (5) §96 (ASP.NET MVC) SB Admin (6) §97 (ASP.NET MVC) Kestrel, publish

Partial Page, Partial View

Trong các View khái niệm Partial Page (hoặc Partial View) được sử dụng khi bạn chia nhỏ các trang Razor Page, hay các View ra thành từng phần nhỏ.

Lợi ích của việc chia nhỏ này đó là:

  • Một View (Razor Page) phức tạp, khó bảo trì được chia thành nhiều phần nhỏ, dễ kiểm soát, dễ làm việc nhóm
  • Sử dụng lại được những phần chung cho các trang

Tạo Partial Page, Partial View

Partial Page chính là các file .cshtml - chỉ có có điều loại file này không được routing tới (không được gọi trức tiếp), nên tên của nó sẽ bắt đầu bằng ký tự _

Chèn Partial Page, Partial View, chuyển dữ liệu đến Partial

Để chèn một Partial Page vào View, Razor Page bạn có thể sử dụng Partial Tag Helper

<partial name="_NamePartial" />

Hoặc bạn có thể sử dụng phương thức Partial trong thuộc tính HTML

@Html.Partial("_NamePartial") // Hoặc dùng PartialAsync, RenderPartial, RenderPartialAsync

Truyền ViewData sang Partial

Mặc định Partial Page nhận một bản copy thuộc tính ViewData (kiểu ViewDataDictionary ) của Page nạp nó. Bạn Bạn có thể tạo ra một đối tượng ViewDataDictionary và thiết lập ViewData cho Partial thay cho mặc định

@{
   var products = new string[] {"Sản phẩm 1", "Sản phẩm 2" };
}
@await Html.PartialAsync("_NamePartial", new ViewDataDictionary(ViewData) { {"product", products}})

Lúc này trong Partial có thể đọc được dữ liệu:

 @{
     String[] products = ViewData["products"] as String[];
 }
 @foreach (var item in products)
 {
    <p>@item</p>
 }

Truyền Model sang Partial

@{
   var products = new string[] {"Sản phẩm 1", "Sản phẩm 2" };
}
@await Html.PartialAsync("_NamePartial", products)

Lúc này trong Partial có thể đọc được dữ liệu Model:

@model String[]
 @foreach (var item in Model)
 {
    <p>@item</p>
 }

Thư mục chứa Partial Page, Partial View

Razor tìm các Partial Page ở các thư mục theo thứ tự:

  • Thư mục gọi file Razor
  • Thư mục cha gọi file Razor
  • Shared
  • Pages/Shared
  • Views/Shared

Trong MVC thì theo thứ tự các thư mục:

  • /Areas/<Area-Name>/Views/<Controller-Name>
  • /Areas/<Area-Name>/Views/Shared
  • /Views/Shared
  • /Pages/Shared
Đăng ký theo dõi ủng hộ kênh