Dao cạo: @ Html.Partial () so với @RenderPage ()


93

Cách thích hợp để hiển thị mẫu con là gì?

Và sự khác biệt là gì? Cả hai dường như làm việc cho tôi.

Và tại sao @Html.RenderPartial()không còn hoạt động?

Câu trả lời:


127
Html.Partial("MyView")

Hiển thị chế độ xem "MyView" thành MvcHtmlString. Nó tuân theo các quy tắc tiêu chuẩn để tra cứu chế độ xem (tức là kiểm tra thư mục hiện tại, sau đó kiểm tra Sharedthư mục).

Html.RenderPartial("MyView")

Cũng giống như Html.Partial(), ngoại trừ việc nó ghi đầu ra của nó trực tiếp vào luồng phản hồi. Điều này hiệu quả hơn, vì nội dung dạng xem không được lưu vào bộ nhớ đệm. Tuy nhiên, vì phương thức không trả về bất kỳ đầu ra nào nên @Html.RenderPartial("MyView")sẽ không hoạt động. Bạn cần phải quấn các cuộc gọi trong một khối mã thay vì: @{Html.RenderPartial("MyView");}.

RenderPage("MyView.cshtml")

Hiển thị chế độ xem được chỉ định (được xác định bằng đường dẫn và tên tệp chứ không phải theo tên chế độ xem) trực tiếp đến luồng phản hồi, chẳng hạn như Html.RenderPartial(). Bạn có thể cung cấp bất kỳ mô hình nào bạn thích cho chế độ xem bằng cách đưa nó làm tham số thứ hai

RenderPage("MyView.cshtml", MyModel)

8
Có chỉ số nào về mức độ hiệu quả của @ {Html.RenderPartial ("MyView");} so với @ Html.RenderPartial ("MyView") không?
Faust

@Faust ý của bạn là Partial vd RenderPartial?
Cacho Santa

1
@cacho: vâng, nhận xét của tôi nên đọc @Html.Partial("MyView")so với@{Html.RenderPartial("MyView");}
Faust

2
Điều chỉnh nhỏ: tham số thứ hai trong RenderPage () không phải là mô hình, nó là một đối tượng param [] được truy cập thông qua thuộc tính PageData. Nó dường như hoạt động như trên vì theo mặc định, mô hình từ trang "mẹ" được chuyển qua trang "con". msdn.microsoft.com/en-us/library/…
Jon

Có cách nào để lồng một trang hoàn chỉnh dọc theo mô hình của nó bằng cách gọi RenderPagekhông? Tôi muốn lồng một trang khác bằng cách chỉ định một tham số truy vấn cụ thể, tham số này sẽ lọc dữ liệu trong trang đó và ngoài ra, loại bỏ bố cục của chính nó.
Shimmy Weitzhandler, 27/09/19

17

tôi thích

@RenderPage("_LayoutHeader.cshtml")

Kết thúc

@{ Html.RenderPartial("_LayoutHeader"); }

Chỉ vì cú pháp dễ hơn và dễ đọc hơn. Ngoài ra, dường như không có bất kỳ sự khác biệt nào về chức năng.

CHỈNH SỬA: Một lợi thế của RenderPartial là bạn không cần phải chỉ định toàn bộ đường dẫn hoặc phần mở rộng tệp, nó sẽ tự động tìm kiếm các địa điểm phổ biến.


1
Tôi nghĩ rằng đây nên là một bình luận không phải là câu trả lời. Tôi cũng đồng ý với RenderPagevì cú pháp.
Iman Mahmoudinasab

6

Các renderPartial phương pháp không trả lại đánh dấu HTML giống như hầu hết các phương pháp helper khác. Thay vào đó, nó viết nội dung trực tiếp vào luồng phản hồi, đó là lý do tại sao chúng ta phải gọi nó như một dòng hoàn chỉnh của C #, sử dụng dấu chấm phẩy.

Điều này hiệu quả hơn một chút so với việc đệm HTML được hiển thị từ chế độ xem một phần, vì dù sao nó cũng sẽ được ghi vào luồng phản hồi. Nếu bạn thích một cú pháp nhất quán hơn, bạn có thể sử dụng phương thức Html.Partial , phương thức này giống hệt như phương thức RenderPartial , nhưng trả về một đoạn HTML và có thể được sử dụng như @ Html.Partial ("Sản phẩm", p).


2

Chúng tôi cũng có thể chuyển mô hình bằng cách sử dụng các khung nhìn một phần. @ Html.Partial ("MyView", "MyModel");


0
@RenderPages() 

Ở trên không hoạt động trong ASP.NET MVC. Nó chỉ hoạt động trong các Trang web.

@Html.Partial("_Footer")

Bạn sẽ cần sử dụng những điều trên trong ASP.NET MVC.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.