web-dev-qa-db-fra.com

Quelle est la différence (le cas échéant) entre Html.Partial (vue, modèle) et Html.RenderPartial (vue, modèle) dans MVC2?

Autre que le type qu'il retourne et le fait que vous l'appeliez différemment bien sûr

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

Si elles sont différentes, pourquoi voudriez-vous appeler l'une plutôt que l'autre?
Les définitions:

// 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);
    }
}
139
Stéphane

La seule différence est que Partial renvoie un MvcHtmlString et doit être appelé à l'intérieur de <%= %>, alors que RenderPartial renvoie void et rend directement à la vue.

Si vous regardez le code source , vous verrez qu'ils appellent tous les deux la même méthode interne, en transmettant un StringWriter pour qu'il le rende.

Vous devez appeler Partial si vous souhaitez afficher, enregistrer ou manipuler le code HTML généré au lieu de l'écrire sur la page.

166
SLaks

HTML.RenderPartial ne renvoie pas de balisage HTML comme la plupart des autres méthodes d'assistance. Au lieu de, la méthode écrit le contenu directement dans le flux de réponse, raison pour laquelle le développeur doit l'appeler comme une ligne entière de C #, à l'aide d'un point-virgule. Cela est légèrement plus efficace que la mise en mémoire tampon du rendu HTML à partir de la vue partielle, car il sera quand même écrit dans le flux de réponses.

3
StepUp