What is the difference (if any) between Html.Partial(view, model) and Html.RenderPartial(view,model) in MVC2?
asp.netasp.net Mvc-2asp.net Problem Overview
Other than the type it returns and the fact that you call it differently of course
<% Html.RenderPartial(...); %>
<%= Html.Partial(...) %>
If they are different, why would you call one rather than the other one?
The definitions:
// 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);
}
}
asp.net Solutions
Solution 1 - asp.net
The only difference is that Partial
returns an MvcHtmlString
, and must be called inside <%= %>
, whereas RenderPartial
returns void
and renders directly to the view.
If you look at the source code, you'll see that they both call the same internal method, passing a StringWriter for it to render to.
You would call Partial
if you want to view, save, or manipulate the generated HTML instead of writing it to the page.
Solution 2 - asp.net
[This is a great explanation by Dino Esposito:][1]
> The difference between the two methods may look small and harmless,
> but it may bite at you if you don’t know how to handle it. The key
> difference between the two methods is:
>
> - Partial
returns a HTML-encoded string
> - RenderPartial
is a void method that writes directly to the response output stream.
>
> The usage of the two methods is slightly different:
>
> @Html.Partial("_yourPartialView")
> @{ Html.RenderPartial("_yourPartialView "); }
>
> The choice of which to use depends on your requirements. If you need
> to further manipulate the string being injected in the response
> stream, you should use Partial
; otherwise go with RenderPartial
> which is-just because it goes straight to the stream-a little faster
> than Partial
.
>
> In the end, the use-cases for partial views fall in either of two
> camps. The first is when you create a view by composing together
> various independent pieces of markup, as below.
>
>
> @{ Html.RenderPartial("_Header"); }
> @Html.Partial("_Sidebar")
>
RenderPartial
or
> Partial
doesn’t change the final effect. However, because
> RenderPartial
is slightly faster, you may prefer using it.
>
>
>[1]:https://www.red-gate.com/simple-talk/dotnet/asp-net/tips-and-tricks-about-razor-partial-views/
Solution 3 - asp.net
The Html.Partial and Html.RenderPartial are extension method is a reusable portion of a web page. The return type of RenderPartial is void, where as Partial returns MvcHtmlString. Html.RenderAction will render the result directly to the Response Stream (More efficient & fast) whereas Html.Action returns a string (which can be manipulated) with the result.