Html.Częściowy vs Html.RenderPartial & Html.Akcja vs Html.RenderAction

In ASP.NET MVC, jaka jest różnica między:

  • Html.Partial i Html.RenderPartial
  • Html.Action i Html.RenderAction
Author: abatishchev, 2011-03-09

13 answers

Html.Partial zwraca ciąg znaków. Html.RenderPartial wywołuje Write wewnętrznie i zwraca void.

Podstawowe użycie to:

// Razor syntax
@Html.Partial("ViewName")
@{ Html.RenderPartial("ViewName");  }

// WebView syntax
<%: Html.Partial("ViewName") %>
<% Html.RenderPartial("ViewName"); %>

W powyższym fragmencie oba wywołania dadzą ten sam wynik.

Podczas gdy można zapisać wyjście Html.Partial w zmiennej lub zwrócić go z metody, jeden nie może zrobić tego za pomocą Html.RenderPartial. Wynik zostanie zapisany do strumienia Response podczas wykonywania / ewaluacji.

Dotyczy to również Html.Action i Html.RenderAction.

 1130
Author: GvS,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-05-13 12:40:22

Pomyśl o @ Html.Częściowy jako kod HTML skopiowany na Stronę nadrzędną. Pomyśl o @ Html.RenderPartial jako ... kontrola użytkownika ascx włączona do strony nadrzędnej. A .kontrola użytkownika ascx ma znacznie więcej kosztów.

'@Html.Partial ' zwraca zakodowany łańcuch html, który jest konstruowany w linii z rodzicem. Ma dostęp do modelu rodzica.

'@Html.RenderPartial ' zwraca odpowiednik a .kontrola użytkownika ascx. Otrzymuje własną kopię ViewDataDictionary strony zmiany wprowadzone w danych ViewData RenderPartial nie wpływają na dane ViewData rodzica.

Używając odbicia znajdujemy:

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);
}
 77
Author: Brett Jones,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-06-14 01:55:44

Różnica polega na tym, że pierwszy zwraca MvcHtmlString, a drugi (Render..) wyprowadza bezpośrednio odpowiedź.

 55
Author: Aliostad,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-03-09 15:44:15

Oto co znalazłem:

Użyj RenderAction , gdy nie masz modelu do wysłania do widoku i masz wiele html do przywrócenia, które nie muszą być przechowywane w zmiennej.

Użyj Akcji , gdy nie masz modelu do wysłania do widoku i masz trochę tekstu do przywrócenia, który musi być przechowywany w zmiennej.

Użyj RenderPartial , Gdy masz model do wysłania do widoku i będzie dużo html, który nie potrzebuje być przechowywane w zmiennej.

Użyj częściowego, Gdy masz model do wysłania do widoku i będzie trochę tekstu, który musi być przechowywany w zmiennej.

Renderaction i renderpartial są szybsze.

 34
Author: David,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-11-18 20:55:46

Według mnie @Html.RenderPartial() ma szybsze wykonanie niż @Html.Partial() ze względu na Html.RenderPartial daje szybką odpowiedź na wyjście.

Ponieważ kiedy używam @Html.Partial(), Ładowanie mojej strony zajmuje więcej czasu w porównaniu do @Html.RenderPartial()

 21
Author: iChirag,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-10-31 11:28:50

@Html.Partial i @Html.RenderPartial są używane, gdy model widoku częściowego jest zgodny z modelem nadrzędnym, nie musimy tworzyć żadnej metody akcji, aby to wywołać.

@Html.Action i @Html.RenderAction są używane, gdy model widoku częściowego jest niezależny od modelu nadrzędnego, zasadniczo jest używany, gdy chcesz wyświetlić zawartość typu widżetu na stronie. Podczas wywoływania metody z widoku należy utworzyć metodę akcji, która zwróci częściowy wynik widoku.

 15
Author: Jayesh Patel,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-09-28 09:35:35

Więcej o pytaniu:

"Gdy Html.RenderPartial () jest wywoływana tylko z nazwą częściowej widok, ASP.NET MVC przejdzie do częściowego widoku ten sam Model i Obiekty ViewData dictionary używane przez wywołujący szablon widoku."

"NerdDinner" od Professional ASP.NET MVC 1.0

 12
Author: Ygor Thomaz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-06-07 08:52:41

Typ zwracany Html.RenderAction to void, co oznacza, że bezpośrednio renderuje odpowiedzi w widoku, gdzie typ zwracany Html.Action to MvcHtmlString możesz przechwycić jego widok renderowania w kontrolerze i zmodyfikować go za pomocą następującej metody

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

Zwróci to łańcuch Html widoku.

Dotyczy to również Html.Partial i Html.RenderPartial

 8
Author: Shivkumar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-09-28 09:51:56

Partial lub Renderpartial: nie ma potrzeby tworzenia metody akcji. zastosowanie, gdy dane do wyświetlenia w widoku częściowym są już obecne w modelu bieżącej strony.

Action lub Renderaction: wymaga metody działania potomka. użyj, gdy dane do wyświetlenia w widoku mają niezależny model.

 7
Author: Anil,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-02-07 12:58:46

Różnice:

  1. Zwracany typ RenderPartial to void, gdzie jako Partial zwraca MvcHtmlString

  2. Składnia wywoływania metod Partial() i RenderPartial() w widokach Razor

    @Html.Partial ("PartialViewName")
    @ {Html.RenderPartial ("PartialViewName");}

  3. Składnia wywoływania metod Partial() i RenderPartial() w widokach webform

[ % : Html.Partial ("PartialViewName")%]
[% Html.RenderPartial ("PartialViewName");%]

Poniżej znajdują się 2 najczęstsze pytania dotyczące rozmowy kwalifikacyjnej związane z Partial() i RenderPartial() Kiedy użyłbyś Partial() zamiast RenderPartial() i odwrotnie?

Główna różnica polega na tym, że RenderPartial() zwraca void, A wyjście zostanie zapisane bezpośrednio do strumienia wyjściowego, gdzie jako metoda Partial() zwraca MvcHtmlString, którą można przypisać do zmiennej i manipulować nią w razie potrzeby. Tak więc, gdy istnieje potrzeba przypisania wyjścia do zmiennej do manipulowania to, następnie użyj Partial (), w przeciwnym razie użyj RenderPartial ().

Który z nich jest lepszy dla wydajności?

Z punktu widzenia wydajności renderowanie bezpośrednio do strumienia wyjściowego jest lepsze. RenderPartial() robi dokładnie to samo i jest lepszy dla wydajności nad Partial().

 7
Author: Nazmul Hasan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-05-13 04:03:48

Html.Partial: returns MvcHtmlString and slow

Html.RenderPartial: bezpośrednio renderować/zapisywać na strumieniu wyjściowym i zwraca void i jest bardzo szybki w porównaniu do Html.Partial

 5
Author: Navneet,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-08-25 15:26:36

Dla "częściowego" zawsze używam go w następujący sposób:

Jeśli jest coś, co musisz umieścić na stronie, którą musisz przejść przez kontroler (tak jak w przypadku wywołania Ajax), użyj "Html.RenderPartial".

Jeśli masz' static 'include, który nie jest powiązany z kontrolerem per-se i znajduje się na przykład w folderze 'shared', użyj " HTML.częściowe "

 2
Author: scgough,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-03-10 21:48:36

@Html.Partial zwraca widok w zakodowanym HTML łańcuchu i używa tego samego widoku TextWriter object. @Html.RenderPartial ta metoda zwraca void. @Html.RenderPartial jest szybszy niż @Html.Partial

Składnia dla PartialView:

 [HttpGet] 
 public ActionResult AnyActionMethod
 {
     return PartialView();
 }
 1
Author: Mayank,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-07-11 22:57:29