Html.Częściowy vs Html.RenderPartial & Html.Akcja vs Html.RenderAction
In ASP.NET MVC, jaka jest różnica między:
-
Html.Partial
iHtml.RenderPartial
-
Html.Action
iHtml.RenderAction
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
.
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);
}
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ź.
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.
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()
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.
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
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
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.
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:
Zwracany typ
RenderPartial
tovoid
, gdzie jakoPartial
zwracaMvcHtmlString
-
Składnia wywoływania metod
Partial()
iRenderPartial()
w widokach Razor@Html.Partial ("PartialViewName")
@ {Html.RenderPartial ("PartialViewName");} -
Składnia wywoływania metod
Partial()
iRenderPartial()
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()
.
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
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 "
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();
}
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