Trong ASP.NET MVC, sự khác biệt giữa:
Html.Partial
vàHtml.RenderPartial
Html.Action
vàHtml.RenderAction
Trong ASP.NET MVC, sự khác biệt giữa:
Html.Partial
và Html.RenderPartial
Html.Action
và Html.RenderAction
Câu trả lời:
Html.Partial
trả về một chuỗi. Html.RenderPartial
gọi Write
nội bộ và trả lại void
.
Cách sử dụng cơ bản là:
// Razor syntax
@Html.Partial("ViewName")
@{ Html.RenderPartial("ViewName"); }
// WebView syntax
<%: Html.Partial("ViewName") %>
<% Html.RenderPartial("ViewName"); %>
Trong đoạn trích trên, cả hai cuộc gọi sẽ mang lại kết quả như nhau.
Trong khi người ta có thể lưu trữ đầu ra của Html.Partial
một biến hoặc trả về nó từ một phương thức, thì người ta không thể làm điều này với Html.RenderPartial
.
Kết quả sẽ được ghi vào Response
luồng trong quá trình thực hiện / đánh giá.
Điều này cũng áp dụng cho Html.Action
và Html.RenderAction
.
Html.Partial()
được tạo ra để có một cú pháp trôi chảy hơn với Dao cạo. Như @Vlad đã nói, Html.RenderPartial()
hiệu quả hơn.
Hãy nghĩ về @ Html.Partial như mã HTML được sao chép vào trang mẹ. Hãy nghĩ về @ Html.RenderPartial như một điều khiển người dùng .ascx được tích hợp vào trang mẹ. Một điều khiển người dùng .ascx có nhiều chi phí hơn.
'@ Html.Partial' trả về một chuỗi được mã hóa html được xây dựng nội tuyến với cha mẹ. Nó truy cập mô hình của cha mẹ.
'@ Html.RenderPartial' trả về tương đương với kiểm soát người dùng .ascx. Nó nhận được bản sao riêng của ViewDataDipedia của trang và các thay đổi được thực hiện đối với ViewData của RenderPartial không ảnh hưởng đến ViewData của cha mẹ.
Sử dụng sự phản ánh, chúng tôi tìm thấy:
public static MvcHtmlString Partial(this HtmlHelper htmlHelper, string partialViewName, object model, ViewDataDictionary viewData)
{
MvcHtmlString mvcHtmlString;
using (StringWriter stringWriter = new StringWriter(CultureInfo.CurrentCulture))
{
htmlHelper.RenderPartialInternal(partialViewName, viewData, model, stringWriter, ViewEngines.Engines);
mvcHtmlString = MvcHtmlString.Create(stringWriter.ToString());
}
return mvcHtmlString;
}
public static void RenderPartial(this HtmlHelper htmlHelper, string partialViewName)
{
htmlHelper.RenderPartialInternal(partialViewName, htmlHelper.ViewData, null, htmlHelper.ViewContext.Writer, ViewEngines.Engines);
}
Partial
kết xuất vào bộ đệm không có nghĩa là nó được hiển thị không đồng bộ - hoàn toàn ngược lại - tôi không thể thấy cách bạn có thể tuyên bố RenderPartial
là "tốn nhiều tài nguyên hơn".
Đây là những gì tôi đã tìm thấy:
Sử dụng RenderAction khi bạn không có mô hình để gửi đến chế độ xem và có rất nhiều html để mang lại mà không cần phải lưu trữ trong một biến.
Sử dụng Hành động khi bạn không có mô hình để gửi đến chế độ xem và có một chút văn bản để đưa trở lại cần được lưu trữ trong một biến.
Sử dụng RenderPartial khi bạn có một mô hình để gửi đến chế độ xem và sẽ có rất nhiều html không cần phải được lưu trữ trong một biến.
Sử dụng một phần khi bạn có một mô hình để gửi đến chế độ xem và sẽ có một ít văn bản cần được lưu trữ trong một biến.
RenderAction và RenderPartial nhanh hơn.
@Html.Partial
và @Html.RenderPartial
được sử dụng khi mô hình Chế độ xem một phần của bạn là sự tương ứng của mô hình mẹ, chúng tôi không cần tạo bất kỳ phương thức hành động nào để gọi phương thức này.
@Html.Action
và @Html.RenderAction
được sử dụng khi mô hình chế độ xem một phần của bạn độc lập với mô hình mẹ, về cơ bản nó được sử dụng khi bạn muốn hiển thị bất kỳ nội dung loại tiện ích nào trên trang. Bạn phải tạo một phương thức hành động trả về kết quả xem một phần trong khi gọi phương thức từ chế độ xem.
Thêm về câu hỏi:
"Khi Html.RenderPartial () được gọi chỉ bằng tên của chế độ xem một phần, ASP.NET MVC sẽ chuyển sang chế độ xem một phần cho cùng các đối tượng từ điển Model và ViewData được sử dụng bởi mẫu chế độ xem cuộc gọi."
Ner NerdDinner trực tiếp từ ASP.NET ASP.NET Professional 1.0
Kiểu trả về Html.RenderAction
là void
có nghĩa là nó trực tiếp kết xuất các phản hồi trong Chế độ xem trong đó kiểu trả về Html.Action
là MvcHtmlString
Bạn có thể xem chế độ hiển thị của nó trong bộ điều khiển và sửa đổi nó bằng cách sử dụng phương thức sau
protected string RenderPartialViewToString(string viewName, object model)
{
if (string.IsNullOrEmpty(viewName))
viewName = ControllerContext.RouteData.GetRequiredString("action");
ViewData.Model = model;
using (StringWriter sw = new StringWriter())
{
ViewEngineResult viewResult = ViewEngines.Engines.FindPartialView(ControllerContext, viewName);
ViewContext viewContext = new ViewContext(ControllerContext, viewResult.View, ViewData, TempData, sw);
viewResult.View.Render(viewContext, sw);
return sw.GetStringBuilder().ToString();
}
}
Điều này sẽ trả về chuỗi Html của View.
Điều này cũng được áp dụng cho Html.Partial
vàHtml.RenderPartial
Partial hoặc RenderPartial: Không cần tạo phương thức hành động. sử dụng khi dữ liệu được hiển thị trên chế độ xem một phần đã có trong mô hình của trang hiện tại.
Action hoặc RenderAction: Yêu cầu phương thức hành động con. sử dụng khi dữ liệu để hiển thị trên khung nhìn có mô hình độc lập.
Sự khác biệt:
Kiểu trả về RenderPartial
là void
, nơi Partial
trả vềMvcHtmlString
Cú pháp để gọi Partial()
và RenderPartial()
phương thức trong chế độ xem Dao cạo
@ Html.Partial ("PartialViewName")
@ {Html.RenderPartial ("PartialViewName"); }
Cú pháp để gọi Partial()
và RenderPartial()
phương thức trong dạng xem webform
[%: Html.Partial ("PartialViewName")%]
[% Html.RenderPartial ("PartialViewName"); %]
Sau đây là 2 câu hỏi phỏng vấn phổ biến liên quan đến Partial()
và RenderPartial()
Khi nào bạn sẽ sử dụng Partial()
hơn RenderPartial()
và ngược lại?
Sự khác biệt chính là RenderPartial()
trả về void và đầu ra sẽ được ghi trực tiếp vào luồng đầu ra, khi Partial()
phương thức trả về MvcHtmlString
, có thể được gán cho một biến và thao tác với nó nếu được yêu cầu. Vì vậy, khi có nhu cầu gán đầu ra cho một biến để thao tác với nó, sau đó sử dụng Partial (), khác sử dụng RenderPartial ().
Cái nào tốt hơn cho hiệu suất?
Từ góc độ hiệu suất, kết xuất trực tiếp đến luồng đầu ra là tốt hơn. RenderPartial()
thực hiện chính xác điều tương tự và tốt hơn cho hiệu suất hơn Partial()
.
Đối với "một phần" tôi luôn sử dụng nó như sau:
Nếu có thứ gì đó bạn cần đưa vào một trang mà bạn cần phải đi qua bộ điều khiển (giống như bạn thực hiện với một cuộc gọi Ajax) thì hãy sử dụng "Html.RenderPartial".
Nếu bạn có 'tĩnh' bao gồm không được liên kết với bộ điều khiển mỗi lần và chỉ trong thư mục 'chia sẻ', hãy sử dụng "HTML.partial"
@Html.Partial
trả về chế độ xem trong chuỗi được mã hóa HTML và sử dụng cùng một TextWriter
đối tượng xem .
@Html.RenderPartial
phương pháp này trở lại void
.
@Html.RenderPartial
nhanh hơn@Html.Partial
Cú pháp cho PartialView
:
[HttpGet]
public ActionResult AnyActionMethod
{
return PartialView();
}