Думайте о @ Html.Partial как о HTML-коде, скопированном на родительскую страницу.
Думайте о @ Html.RenderPartial как о пользовательском элементе управления .ascx, встроенном в родительскую страницу. Пользовательский элемент управления .ascx имеет гораздо больше накладных расходов.
'@Html.Partial' возвращает html-кодированную строку, которая создается встроенным с родителем. Доступ к модели родителя.
'@Html.RenderPartial' возвращает эквивалент пользовательского элемента управления .ascx. Он получает свою собственную копию ViewDataDictionary страницы, и изменения, сделанные в ViewData RenderPartial, не влияют на ViewData родителя.
Используя отражение, мы находим:
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);
}