Dalam ASP.NET MVC, apa perbedaan antara:
Html.PartialdanHtml.RenderPartialHtml.ActiondanHtml.RenderAction
Dalam ASP.NET MVC, apa perbedaan antara:
Html.Partial dan Html.RenderPartialHtml.Action dan Html.RenderActionJawaban:
Html.Partialmengembalikan sebuah String. Html.RenderPartialpanggilan Writeinternal 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.Partialdalam variabel atau mengembalikannya dari suatu metode, seseorang tidak dapat melakukan ini dengan Html.RenderPartial.
Hasilnya akan ditulis ke Responsealiran selama eksekusi / evaluasi.
Ini juga berlaku untuk Html.Actiondan 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);
}
Partialmerender 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.Partialdan @Html.RenderPartialdigunakan ketika model tampilan sebagian Anda adalah korespondensi dari model induk, kami tidak perlu membuat metode tindakan apa pun untuk memanggil ini.
@Html.Actiondan @Html.RenderActiondigunakan 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.RenderActionadalah voidyang berarti secara langsung merender respons dalam tampilan di mana tipe kembalinya Html.Actionadalah MvcHtmlStringAnda 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.PartialdanHtml.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 RenderPartialadalah void, di mana sebagai PartialpengembalianMvcHtmlString
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.Partialmengembalikan tampilan dalam string yang dikodekan-HTML dan menggunakan TextWriterobjek tampilan yang sama .
@Html.RenderPartialmetode ini kembali void.
@Html.RenderPartiallebih cepat dari@Html.Partial
Sintaks untuk PartialView:
[HttpGet]
public ActionResult AnyActionMethod
{
return PartialView();
}