Html.Partial vs Html.RenderPartial & Html.Action vs Html.RenderAction

Dans ASP.NET MVC, quelle est la différence entre:

  • Html.Partial et Html.RenderPartial
  • Html.Action et Html.RenderAction

Html.Partial renvoie une chaîne. Html.RenderPartial appelle Write interne et renvoie void .

L’utilisation de base est la suivante:

 // Razor syntax @Html.Partial("ViewName") @{ Html.RenderPartial("ViewName"); } // WebView syntax <%: Html.Partial("ViewName") %> <% Html.RenderPartial("ViewName"); %> 

Dans l’extrait de code ci-dessus, les deux appels donneront le même résultat.

Bien que l’on puisse stocker la sortie de Html.Partial dans une variable ou la renvoyer à partir d’une méthode, on ne peut pas le faire avec Html.RenderPartial . Le résultat sera écrit dans le stream de Response lors de l’exécution / évaluation.

Cela s’applique également à Html.Action et Html.RenderAction .

Pensez à @ Html.Partial en tant que code HTML copié dans la page parente. Pensez à @ Html.RenderPartial en tant que contrôle utilisateur .ascx intégré à la page parente. Un contrôle utilisateur .ascx a beaucoup plus de frais généraux.

‘@ Html.Partial’ renvoie une chaîne codée en HTML qui est construite en ligne avec le parent. Il accède au modèle du parent.

‘@ Html.RenderPartial’ renvoie l’équivalent d’un contrôle utilisateur .ascx. Il obtient sa propre copie de ViewDataDictionary de la page et les modifications apscopes à ViewData de RenderPartial n’affectent pas le ViewData du parent.

En utilisant la reflection, nous trouvons:

 public static MvcHtmlSsortingng Partial(this HtmlHelper htmlHelper, ssortingng partialViewName, object model, ViewDataDictionary viewData) { MvcHtmlSsortingng mvcHtmlSsortingng; using (SsortingngWriter ssortingngWriter = new SsortingngWriter(CultureInfo.CurrentCulture)) { htmlHelper.RenderPartialInternal(partialViewName, viewData, model, ssortingngWriter, ViewEngines.Engines); mvcHtmlSsortingng = MvcHtmlSsortingng.Create(ssortingngWriter.ToSsortingng()); } return mvcHtmlSsortingng; } public static void RenderPartial(this HtmlHelper htmlHelper, ssortingng partialViewName) { htmlHelper.RenderPartialInternal(partialViewName, htmlHelper.ViewData, null, htmlHelper.ViewContext.Writer, ViewEngines.Engines); } 

La différence est d’abord que l’on retourne un MvcHtmlSsortingng mais que le second ( Render.. ) renvoie directement à la réponse.

Voici ce que j’ai trouvé:

Utilisez RenderAction lorsque vous n’avez pas de modèle à envoyer à la vue et que vous avez besoin de beaucoup de fichiers HTML à ne pas stocker dans une variable.

Utilisez Action lorsque vous n’avez pas de modèle à envoyer à la vue et que vous avez un petit texte à ramener qui doit être stocké dans une variable.

Utilisez RenderPartial lorsque vous avez un modèle à envoyer à la vue et il y aura beaucoup de code HTML qui n’a pas besoin d’être stocké dans une variable.

Utilisez Partial lorsque vous avez un modèle à envoyer à la vue et qu’il y aura un peu de texte à stocker dans une variable.

RenderAction et RenderPartial sont plus rapides.

Selon moi @Html.RenderPartial() a une exécution plus rapide que @Html.Partial() raison de Html.RenderPartial donne une réponse rapide à la sortie.

Parce que quand j’utilise @Html.Partial() , mon site prend plus de temps à charger par rapport à @Html.RenderPartial()

@Html.Partial et @Html.RenderPartial sont utilisés lorsque votre modèle de vue partielle est la correspondance du modèle parent, nous n’avons pas besoin de créer de méthode d’action pour appeler cela.

@Html.Action et @Html.RenderAction sont utilisés lorsque votre modèle de vue partielle est indépendant du modèle parent, il est essentiellement utilisé lorsque vous souhaitez afficher un contenu de type widget sur la page. Vous devez créer une méthode d’action qui renvoie un résultat de vue partiel lors de l’appel de la méthode à partir de la vue.

En savoir plus sur la question:

“Lorsque Html.RenderPartial () est appelé uniquement avec le nom de la vue partielle, ASP.NET MVC transmet à la vue partielle les mêmes objects de dictionnaire Model et ViewData utilisés par le modèle de vue appelante.”

«NerdDinner» de Professional ASP.NET MVC 1.0

Le type de retour de Html.RenderAction est void qui signifie qu’il rend directement les réponses dans View, où le type de retour de Html.Action est MvcHtmlSsortingng Vous pouvez intercepter sa vue de rendu dans le contrôleur et la modifier en utilisant la méthode suivante

 protected ssortingng RenderPartialViewToSsortingng(ssortingng viewName, object model) { if (ssortingng.IsNullOrEmpty(viewName)) viewName = ControllerContext.RouteData.GetRequiredSsortingng("action"); ViewData.Model = model; using (SsortingngWriter sw = new SsortingngWriter()) { ViewEngineResult viewResult = ViewEngines.Engines.FindPartialView(ControllerContext, viewName); ViewContext viewContext = new ViewContext(ControllerContext, viewResult.View, ViewData, TempData, sw); viewResult.View.Render(viewContext, sw); return sw.GetSsortingngBuilder().ToSsortingng(); } } 

Cela retournera la chaîne HTML de la vue.

Ceci est également applicable à Html.Partial et Html.RenderPartial

Partiel ou RenderPartial: Pas besoin de créer de méthode d’action. utiliser lorsque les données à afficher sur la vue partielle sont déjà présentes dans le modèle de la page en cours.

Action ou RenderAction: nécessite une méthode d’action enfant. utiliser lorsque les données à afficher sur la vue ont un modèle indépendant.

Différences:

  1. Le type de retour de RenderPartial est void , où Partial renvoie MvcHtmlSsortingng

  2. Syntaxe d’invocation des méthodes Partial() et RenderPartial() dans les vues de razor

    @ Html.Partial (“PartialViewName”)
    @ {Html.RenderPartial (“PartialViewName”); }

  3. Syntaxe d’invocation des méthodes Partial() et RenderPartial() dans les vues Webform

[%: Html.Partial (“PartialViewName”)%]
[% Html.RenderPartial (“PartialViewName”); %]

Voici les 2 questions d’interview les plus courantes concernant Partial() et RenderPartial() Quand utiliseriez-vous Partial() sur RenderPartial() et vice versa?

La principale différence est que RenderPartial() retourne un void et que la sortie sera écrite directement dans le stream de sortie, alors que la méthode Partial() renvoie MvcHtmlSsortingng , qui peut être affecté à une variable et le manipule si nécessaire. Donc, quand il faut assigner la sortie à une variable pour la manipuler, alors utilisez Partial (), sinon utilisez RenderPartial ().

Lequel est le meilleur pour la performance?

Du sharepoint vue des performances, le rendu directement dans le stream de sortie est meilleur. RenderPartial() fait exactement la même chose et est meilleur pour les performances sur Partial() .

Html.Partial : retourne MvcHtmlSsortingng et lent

Html.RenderPartial : rend directement / écrit sur le stream de sortie et retourne le void et il est très rapide par rapport à Html.Partial

Pour “partiel” je l’utilise toujours comme suit:

Si vous devez inclure quelque chose dans une page que vous devez utiliser via le contrôleur (comme vous le feriez avec un appel Ajax), utilisez “Html.RenderPartial”.

Si vous avez un “static” include qui n’est pas lié à un contrôleur per-se et juste dans le dossier “shared” par exemple, utilisez “HTML.partial”

@Html.Partial renvoie la vue dans la chaîne HTML et utilise la même vue TextWriter object TextWriter . @Html.RenderPartial cette méthode retourne un void . @Html.RenderPartial est plus rapide que @Html.Partial

La syntaxe de PartialView :

  [HttpGet] public ActionResult AnyActionMethod { return PartialView(); }