Pisau cukur: @ Html.Parsial () vs @RenderPage ()

93

Apa cara yang tepat untuk merender template anak?

Dan apa bedanya? Keduanya tampaknya berhasil untuk saya.

Dan mengapa tidak @Html.RenderPartial()lagi berfungsi?

Evgenyt
sumber

Jawaban:

127
Html.Partial("MyView")

Merender tampilan "MyView" menjadi MvcHtmlString. Ini mengikuti aturan standar untuk pencarian tampilan (yaitu, periksa direktori saat ini, lalu periksa Shareddirektori).

Html.RenderPartial("MyView")

Melakukan hal yang sama Html.Partial(), kecuali menulis outputnya langsung ke aliran respons. Ini lebih efisien, karena konten tampilan tidak di-buffer dalam memori. Namun, karena metode ini tidak mengembalikan keluaran apa pun, @Html.RenderPartial("MyView")tidak akan berfungsi. Anda harus membungkus panggilan di sebuah blok kode gantinya: @{Html.RenderPartial("MyView");}.

RenderPage("MyView.cshtml")

Merender tampilan yang ditentukan (diidentifikasi berdasarkan jalur dan nama file, bukan dengan nama tampilan) langsung ke aliran respons, seperti Html.RenderPartial(). Anda dapat menyediakan model apa pun yang Anda suka ke tampilan dengan memasukkannya sebagai parameter kedua

RenderPage("MyView.cshtml", MyModel)
Annabelle
sumber
8
Apakah ada metrik tentang peningkatan efisiensi @ {Html.RenderP Partial ("MyView");} dibandingkan @ Html.RenderP Partial ("MyView")?
Faust
@ Faust maksud Anda Partial vd RenderParsial?
Cacho Santa
1
@cacho: ya, komentar saya harus dibaca @Html.Partial("MyView")vs.@{Html.RenderPartial("MyView");}
Faust
2
Koreksi kecil: parameter kedua dalam RenderPage () bukanlah modelnya, ini adalah Objek param [] yang diakses melalui properti PageData. Tampaknya berfungsi seperti di atas karena secara default model dari halaman "induk" diteruskan ke "anak". msdn.microsoft.com/en-us/library/…
Jon
Apakah ada cara untuk menyarangkan halaman lengkap di sepanjang modelnya dengan memanggil RenderPage? Saya ingin menumpuk halaman yang berbeda dengan menentukan parameter kueri tertentu, yang pada gilirannya akan memfilter data di halaman tersebut, dan sebagai tambahan, menghapus tata letaknya sendiri.
Shimmy Weitzhandler
17

saya lebih memilih

@RenderPage("_LayoutHeader.cshtml")

Lebih

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

Hanya karena sintaksnya lebih mudah dan lebih mudah dibaca. Selain itu, tampaknya tidak ada perbedaan fungsionalitas yang bijaksana.

EDIT: Salah satu keuntungan dari RenderP Partial adalah Anda tidak perlu menentukan seluruh jalur atau ekstensi file, ia akan mencari tempat umum secara otomatis.

Ryan Sampson
sumber
1
Saya pikir ini harus menjadi komentar bukan jawaban. Saya juga setuju RenderPagekarena sintaksnya.
Iman Mahmoudinasab
6

The RenderPartial metode tidak kembali HTML markup seperti kebanyakan metode pembantu lainnya. Sebaliknya, ia menulis konten langsung ke aliran respons, itulah sebabnya kita harus menyebutnya seperti baris lengkap C #, menggunakan titik koma.

Ini sedikit lebih efisien daripada buffering HTML yang dirender dari tampilan parsial, karena itu akan tetap ditulis ke aliran respons. Jika Anda lebih suka sintaks lebih konsisten, Anda dapat menggunakan Html.Partial metode, yang tidak persis sama dengan RenderPartial metode, tetapi kembali HTML fragmen dan dapat digunakan sebagai @ Html.Partial ( "Produk", p).

Omid Shariati
sumber
2

Kita juga bisa melewatkan model menggunakan tampilan parsial. @ Html.Parsial ("MyView", "MyModel");

bayram
sumber
0
@RenderPages() 

Di atas tidak berfungsi di ASP.NET MVC. Ini hanya berfungsi di Halaman Web.

@Html.Partial("_Footer")

Anda harus menggunakan yang di atas di ASP.NET MVC.

Umar Aftab
sumber