145 votes

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

En dehors du type qu'il renvoie et du fait que vous l'appelez différemment, bien sûr.

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

S'ils sont différents, pourquoi appeler l'un 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);
    }
}

172voto

SLaks Points 391154

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

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

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

0 votes

Ok, donc il n'y en a pas :) comme je le pensais, je peux les utiliser sans couture je suppose. Merci :)

41 votes

Non, la différence est le type de retour, comme l'a dit SLaks. Ce n'est pas trivial. En ce qui concerne les performances, il a été dit que le rendu direct sur le flux de sortie est meilleur (c'est pourquoi ils ont utilisé le void RenderPartial pour commencer). Partiel est surtout utile (imo) dans les tests, bien que comme SLaks l'a dit, il peut y avoir des endroits où vous voulez manipuler la sortie avant de la rendre dans le code de production. C'est rare, je pense.

42 votes

Partial est également utile lorsque vous souhaitez obtenir la sortie d'une vue dans le contrôleur. Cela peut être utilisé pour utiliser une vue pour formater un courriel.

5voto

user129206 Points 1026

Il s'agit d'une belle comparaison de toutes les méthodes possibles qu'un développeur asp net mvc pourrait penser à utiliser. Je l'ai trouvé très pratique.

http://www.dotnet-tricks.com/Tutorial/mvc/Q8V2130113-RenderPartial-vs-RenderAction-vs-Partial-vs-Action-in-MVC-Razor.html

P.S : Ceci est applicable pour MVC 3 et suivants.

4voto

StepUp Points 246

Voici une excellente explication de Dino Esposito :

La différence entre les deux méthodes peut sembler mais elle peut vous mordre si vous ne savez pas comment la gérer. La principale différence entre les deux méthodes est la suivante :

  • Partial renvoie une chaîne de caractères codée en HTML
  • RenderPartial est un Méthode vide qui écrit directement dans le flux de sortie de la réponse.

L'utilisation des deux méthodes est légèrement différente :

@Html.Partial("_yourPartialView")
@{ Html.RenderPartial("_yourPartialView "); }

Le choix de l'un ou l'autre dépend de vos besoins. Si vous avez besoin de manipuler davantage la chaîne injectée dans le flux de réponses vous devez utiliser Partial ; sinon, allez avec RenderPartial qui est - juste parce qu'il va directement au ruisseau - un li que Partial .

En fin de compte, les cas d'utilisation des vues partielles relèvent de l'une ou l'autre des deux catégories suivantes deux camps. Le premier est lorsque vous créez une vue en composant ensemble divers éléments indépendants de balisage, comme ci-dessous.

<body>
    @{ Html.RenderPartial("_Header"); }
    @Html.Partial("_Sidebar")
    <div class="container body-content">
       @RenderBody()
    </div>
    @{ Html.RenderPartial("_Footer"); }
</body>

Dans ce cas, votre décision de choisir entre RenderPartial o Partial ne change pas l'effet final. H RenderPartial est légèrement plus rapide, vous préférerez peut-être l'utiliser.

0voto

Ranjeet Verma Points 1

En Html.Partiel y Html.RenderPartial Une méthode d'extension est une partie réutilisable d'une page Web. Le type de retour de RenderPartial est nulle, alors que Partiel renvoie à MvcHtmlString . Html.RenderAction rendra le résultat directement dans le flux de réponses (plus efficace et rapide) alors que Html.Action renvoie une chaîne (qui peut être manipulée) avec le résultat.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X