Dalam ASP.NET MVC, apa perbedaan antara:
Html.Partial
danHtml.RenderPartial
Html.Action
danHtml.RenderAction
Dalam ASP.NET MVC, apa perbedaan antara:
Html.Partial
dan Html.RenderPartial
Html.Action
dan Html.RenderAction
Jawaban:
Html.Partial
mengembalikan sebuah String. Html.RenderPartial
panggilan Write
internal dan kembali void
.
Penggunaan dasar adalah:
// Razor syntax
@Html.Partial("ViewName")
@{ Html.RenderPartial("ViewName"); }
// WebView syntax
<%: Html.Partial("ViewName") %>
<% Html.RenderPartial("ViewName"); %>
Dalam cuplikan di atas, kedua panggilan akan menghasilkan hasil yang sama.
Sementara seseorang dapat menyimpan output Html.Partial
dalam variabel atau mengembalikannya dari suatu metode, seseorang tidak dapat melakukan ini dengan Html.RenderPartial
.
Hasilnya akan ditulis ke Response
aliran selama eksekusi / evaluasi.
Ini juga berlaku untuk Html.Action
dan Html.RenderAction
.
Html.Partial()
diciptakan untuk memiliki sintaks yang lebih lancar dengan Razor. Seperti yang dikatakan @Vlad, Html.RenderPartial()
lebih efisien.
Pikirkan @ Html.Partial sebagai kode HTML yang disalin ke halaman induk. Pikirkan @ Html.RenderPartial sebagai kontrol pengguna .ascx yang dimasukkan ke halaman induk. Kontrol pengguna .ascx memiliki overhead yang jauh lebih besar.
'@ Html.Partial' mengembalikan string yang disandikan html yang dibuat sesuai dengan induknya. Ini mengakses model orang tua.
'@ Html.RenderPartial' mengembalikan setara dengan kontrol pengguna .ascx. Itu mendapatkan salinannya sendiri dari ViewDataDictionary halaman dan perubahan yang dibuat untuk ViewData RenderPartial tidak mempengaruhi ViewData induknya.
Menggunakan refleksi kami menemukan:
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
merender ke dalam buffer tidak berarti itu dirender secara tidak sinkron - justru sebaliknya - saya tidak dapat melihat bagaimana Anda dapat mengklaim RenderPartial
"lebih intensif sumber daya".
Inilah yang saya temukan:
Gunakan RenderAction ketika Anda tidak memiliki model untuk dikirim ke tampilan dan memiliki banyak html untuk mengembalikan yang tidak perlu disimpan dalam variabel.
Gunakan Aksi ketika Anda tidak memiliki model untuk dikirim ke tampilan dan memiliki sedikit teks untuk membawa kembali yang perlu disimpan dalam variabel.
Gunakan RenderPartial ketika Anda memiliki model untuk dikirim ke tampilan dan akan ada banyak html yang tidak perlu disimpan dalam variabel.
Gunakan Parsial ketika Anda memiliki model untuk dikirim ke tampilan dan akan ada sedikit teks yang perlu disimpan dalam variabel.
RenderAction dan RenderPartial lebih cepat.
@Html.Partial
dan @Html.RenderPartial
digunakan ketika model tampilan sebagian Anda adalah korespondensi dari model induk, kami tidak perlu membuat metode tindakan apa pun untuk memanggil ini.
@Html.Action
dan @Html.RenderAction
digunakan ketika model tampilan parsial Anda terpisah dari model induk, pada dasarnya ini digunakan ketika Anda ingin menampilkan konten jenis widget apa pun di halaman. Anda harus membuat metode tindakan yang mengembalikan hasil tampilan sebagian saat memanggil metode dari tampilan.
Lebih lanjut tentang pertanyaan:
"Ketika Html.RenderPartial () dipanggil hanya dengan nama tampilan parsial, ASP.NET MVC akan meneruskan ke tampilan parsial objek Model dan kamus ViewData yang sama yang digunakan oleh templat tampilan panggilan."
“NerdDinner” dari Professional ASP.NET MVC 1.0
Tipe kembalinya Html.RenderAction
adalah void
yang berarti secara langsung merender respons dalam tampilan di mana tipe kembalinya Html.Action
adalah MvcHtmlString
Anda dapat menangkap tampilan render di controller dan memodifikasinya dengan menggunakan metode berikut
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();
}
}
Ini akan mengembalikan string Html dari View.
Ini juga berlaku untuk Html.Partial
danHtml.RenderPartial
Partial or RenderPartial: Tidak perlu membuat metode tindakan. gunakan ketika data yang akan ditampilkan pada tampilan parsial sudah ada dalam model halaman saat ini.
Tindakan atau RenderAction: Membutuhkan metode tindakan anak. gunakan ketika data untuk ditampilkan pada tampilan memiliki model independen.
Perbedaan:
Jenis pengembalian RenderPartial
adalah void
, di mana sebagai Partial
pengembalianMvcHtmlString
Sintaks untuk memohon Partial()
dan RenderPartial()
metode dalam tampilan Razor
@ Html.Partial ("PartialViewName")
@ {Html.RenderPartial ("PartialViewName"); }
Sintaks untuk memohon Partial()
dan RenderPartial()
metode dalam tampilan formulir web
[%: Html.Partial ("PartialViewName")%]
[% Html.RenderPartial ("PartialViewName"); %]
Berikut ini adalah 2 pertanyaan wawancara umum terkait Partial()
dan RenderPartial()
Kapan Anda akan menggunakan Partial()
lebih RenderPartial()
dan sebaliknya?
Perbedaan utama adalah bahwa RenderPartial()
mengembalikan void dan output akan ditulis langsung ke aliran output, sedangkan Partial()
metode yang dikembalikan MvcHtmlString
, yang dapat ditugaskan ke variabel dan memanipulasi jika diperlukan. Jadi, ketika ada kebutuhan untuk menetapkan output ke variabel untuk memanipulasinya, kemudian gunakan Partial (), kalau tidak gunakan RenderPartial ().
Mana yang lebih baik untuk kinerja?
Dari perspektif kinerja, rendering langsung ke aliran output lebih baik. RenderPartial()
melakukan hal yang persis sama dan lebih baik untuk kinerja selesai Partial()
.
Untuk "sebagian" saya selalu menggunakannya sebagai berikut:
Jika ada sesuatu yang perlu Anda sertakan dalam halaman yang harus Anda lewati melalui pengontrol (seperti yang Anda lakukan dengan panggilan Ajax) kemudian gunakan "Html.RenderPartial".
Jika Anda memiliki 'statis' termasuk yang tidak ditautkan ke controller per-se dan hanya di folder 'bersama' misalnya, gunakan "HTML.partial"
@Html.Partial
mengembalikan tampilan dalam string yang dikodekan-HTML dan menggunakan TextWriter
objek tampilan yang sama .
@Html.RenderPartial
metode ini kembali void
.
@Html.RenderPartial
lebih cepat dari@Html.Partial
Sintaks untuk PartialView
:
[HttpGet]
public ActionResult AnyActionMethod
{
return PartialView();
}