Chủ Nhật, 7 tháng 8, 2016

Phân Biệt Html.Partial(), Html.RenderPartial(), Html.Action(), và Html.RenderAction()

Giới thiệu

Nói chung, Html.Partial() và Html.RenderPartial() dùng để chèn sub view có nội dung tĩnh hoặc nội dung được render với dữ liệu lấy từ parent view. Ngược lại, Html.Action() và Html.RenderAction() dùng để chèn sub view được render với dữ liệu sinh ra từ kết quả thực thi action method trên controller.
Sự khác biệt duy nhất giữa Html.Partial() và Html.RenderPartial() là Html.Partial()trả về một chuỗi được encoded (MvcHtmlString class) trong khi Html.RenderPartial()render và write trực tiếp sub view vào trong output stream. Điều này cũng đúng choHtml.Action() và Html.RenderAction().

Vì Html.Partial() và Html.Action() trả về một chuỗi nên chúng có thể được viết trực tiếp trong Razor như sau

@Html.Partial("ViewName")
@Html.Action("ActionName", "ControllerName")

Trong khi đó, Html.RenderPartial() và Html.RenderAction() trả về void nên phải được gọi như là một method trong Razor và do đó phải được đặt trong cặp dấu {} như sau

@{ Html.RenderPartial("ViewName"); }
@{ Html.RenderAction("ActionName", "ControllerName"); }

Khi truyền view name cho Html.Partial() và Html.RenderPartial() thì asp.net mvc sẽ tìm kiếm sub view ở "~/Views/ControllerName/ViewName.cshtml" trong đó "ControllerName" là tên controller mà gọi parent view hoặc ở "~/Views/Shared/ViewName.cshtml".

Khi sub view cần render không nằm trong những location nêu trên thì phải truyền virtual path cho Html.Partial() và Html.RenderPartial() như ví dụ sau

@Html.Partial("~/Views/Account/SubViews/AccountPartial.cshtml")
@{ Html.RenderPartial("~/Views/Shared/Account/AccountPartial.cshtml"); }

Không có nhận xét nào:

Đăng nhận xét