В чем разница (если есть) между Html.Partial(view, model) и Html.RenderPartial(view, model) в MVC2?

Помимо типа, который он возвращает, и того факта, что вы называете это иначе,

<% Html.RenderPartial(...); %>
<%= Html.Partial(...) %>  

Если они разные, зачем вы называете их, а не другой? Определения:

// Type: System.Web.Mvc.Html.RenderPartialExtensions
// Assembly: System.Web.Mvc, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35
// Assembly location: C:\Program Files (x86)\Microsoft ASP.NET\ASP.NET MVC 2\Assemblies\System.Web.Mvc.dll

using System.Web.Mvc;

namespace System.Web.Mvc.Html
{
    public static class RenderPartialExtensions
    {
        public static void RenderPartial(this HtmlHelper htmlHelper, string partialViewName);
        public static void RenderPartial(this HtmlHelper htmlHelper, string partialViewName, ViewDataDictionary viewData);
        public static void RenderPartial(this HtmlHelper htmlHelper, string partialViewName, object model);

        public static void RenderPartial(this HtmlHelper htmlHelper, string partialViewName, object model,
                                     ViewDataDictionary viewData);
    }
}

// Type: System.Web.Mvc.Html.PartialExtensions
// Assembly: System.Web.Mvc, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35
// Assembly location: C:\Program Files (x86)\Microsoft ASP.NET\ASP.NET MVC 2\Assemblies\System.Web.Mvc.dll

using System.Web.Mvc;

namespace System.Web.Mvc.Html
{
    public static class PartialExtensions
    {
        public static MvcHtmlString Partial(this HtmlHelper htmlHelper, string partialViewName);

        public static MvcHtmlString Partial(this HtmlHelper htmlHelper, string partialViewName,
                                        ViewDataDictionary viewData);

        public static MvcHtmlString Partial(this HtmlHelper htmlHelper, string partialViewName, object model);

        public static MvcHtmlString Partial(this HtmlHelper htmlHelper, string partialViewName, object model,
                                        ViewDataDictionary viewData);
    }
}

Ответ 1

Единственное отличие состоит в том, что Partial возвращает MvcHtmlString и должен быть вызван внутри <%= %>, тогда как RenderPartial возвращает void и отображает непосредственно в представление.

Если вы посмотрите на исходный код, вы увидите, что они оба называют один и тот же внутренний метод, передавая StringWriter для его отображения к.

Вы бы назвали Partial, если хотите просмотреть, сохранить или обработать сгенерированный HTML вместо того, чтобы записывать его на страницу.

Ответ 2

HTML.RenderPartial не возвращает HTML-разметку, как большинство других вспомогательных методов. Вместо этого метод записывает контент непосредственно в поток ответов, поэтому разработчик должен вызывать его как целую строку С#, используя точку с запятой. Это немного более эффективно, чем буферизация обработанного HTML из частичного представления, так как в любом случае он будет записан в поток ответов.