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:
Le type de retour de RenderPartial
est void
, où Partial
renvoie MvcHtmlSsortingng
Syntaxe d’invocation des méthodes Partial()
et RenderPartial()
dans les vues de razor
@ Html.Partial (“PartialViewName”)
@ {Html.RenderPartial (“PartialViewName”); }
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(); }