Pertanyaan Html.Partial vs Html.RenderPartial & Html.Action vs Html.RenderAction


Di ASP.NET MVC, apa perbedaan antara:

  • Html.Partial dan Html.RenderPartial
  • Html.Action dan Html.RenderAction

923
2018-03-09 15:41


asal


Jawaban:


Html.Partial mengembalikan sebuah String. Html.RenderPartial panggilan Write secara 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 satu dapat menyimpan output Html.Partial dalam variabel atau mengembalikannya dari metode, satu tidak bisa lakukan ini dengan Html.RenderPartial. Hasilnya akan ditulis ke Response streaming selama eksekusi / evaluasi.

Ini juga berlaku untuk Html.Action dan Html.RenderAction.


1113
2018-03-09 15:44



Pikirkan @ Html.Partial sebagai kode HTML disalin ke halaman induk. Pikirkan @ Html.RenderPartial sebagai kontrol pengguna .ascx dimasukkan ke halaman induk. Kontrol pengguna .ascx memiliki overhead yang jauh lebih besar.

'@ Html.Partial' mengembalikan string html yang di-enkode yang dibuat inline dengan induknya. Ini mengakses model induk.

'@ Html.RenderPartial' mengembalikan setara dengan kontrol pengguna .ascx. Ini mendapat salinan sendiri dari ViewDataDictionary halaman dan perubahan yang dibuat ke ViewData RenderPartial tidak mempengaruhi ViewData orang tua.

Dengan 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);
}

76
2018-04-18 14:36



Perbedaannya adalah yang pertama mengembalikan suatu MvcHtmlString tapi kedua (Render..) output langsung ke respon.


54
2018-03-09 15:44



Inilah yang saya temukan:

Menggunakan RenderAction ketika Anda tidak memiliki model untuk dikirim ke tampilan dan memiliki banyak html untuk membawa kembali yang tidak perlu disimpan dalam variabel.

Menggunakan Tindakan ketika Anda tidak memiliki model untuk dikirim ke tampilan dan memiliki sedikit teks untuk membawa kembali yang perlu disimpan dalam variabel.

Menggunakan RenderPartial ketika Anda memiliki model untuk dikirim ke tampilan dan akan ada banyak html yang tidak perlu disimpan dalam variabel.

Menggunakan Sebagian ketika Anda memiliki model untuk dikirim ke tampilan dan akan ada sedikit teks yang perlu disimpan dalam variabel.

RenderAction dan RenderPartial lebih cepat.


29
2017-11-18 20:55



Menurut saya @Html.RenderPartial() memiliki eksekusi lebih cepat daripada @Html.Partial() karena Html.RenderPartial memberikan respons cepat terhadap Output.

Karena ketika saya gunakan @Html.Partial(), situs web saya membutuhkan lebih banyak waktu untuk memuat dibandingkan @Html.RenderPartial()


21
2018-02-04 04:43



@Html.Partial dan @Html.RenderPartial digunakan ketika model tampilan Parsial Anda adalah korespondensi model induk, kita tidak perlu membuat metode tindakan apa pun untuk memanggil ini.

@Html.Action dan @Html.RenderAction digunakan ketika model pandangan parsial Anda independen dari model induk, pada dasarnya itu digunakan ketika Anda ingin menampilkan konten jenis widget di halaman. Anda harus membuat metode tindakan yang mengembalikan hasil tampilan parsial saat memanggil metode dari tampilan.


14
2018-03-23 13:10



Lebih lanjut tentang pertanyaan:

"Ketika Html.RenderPartial () dipanggil hanya dengan nama parsial   lihat, ASP.NET MVC akan lolos ke tampilan parsial Model yang sama dan   Objek kamus ViewData digunakan oleh templat tampilan panggilan. "

"NerdDinner" dari Profesional ASP.NET MVC 1.0


12
2017-10-02 22:05



Jenis kembalinya Html.RenderAction aku s void itu berarti secara langsung membuat tanggapan di Lihat di mana jenis kembalinya Html.Actionaku s MvcHtmlString Anda dapat menangkap tampilan render di pengontrol 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 dan Html.RenderPartial 


8
2017-09-12 06:08