HTML.Partial vs Html.RenderPartial & Html.Action vs Html.RenderAction
In ASP.NET MVC, Quelle est la différence entre:
-
Html.Partial
etHtml.RenderPartial
-
Html.Action
etHtml.RenderAction
13 réponses
Html.Partial
renvoie une chaîne. Html.RenderPartial
appels Write
en interne et retours void
.
l'usage de base est:
// Razor syntax
@Html.Partial("ViewName")
@{ Html.RenderPartial("ViewName"); }
// WebView syntax
<%: Html.Partial("ViewName") %>
<% Html.RenderPartial("ViewName"); %>
Dans l'extrait ci-dessus, les deux appels donnera le même résultat.
alors qu'on peut stocker la sortie de Html.Partial
dans une variable ou la retourner à partir d'une méthode, un ne peut pas le faire avec Html.RenderPartial
. Le résultat sera écrit à la Response
flux pendant l'exécution / évaluation.
cette disposition s'applique également aux Html.Action
et Html.RenderAction
.
pensez à @Html.Partiel comme code HTML copié dans la page mère. Pensez à @Html.RenderPartial comme une .contrôle de l'utilisateur ascx intégré à la page mère. Un. le contrôle des utilisateurs d'ascx est beaucoup plus lourd.
'@Html.Partial' renvoie une chaîne de caractères encodée html qui est construite en ligne avec le parent. Il accède à la mère modèle.
'@Html.RenderPartial' renvoie l'équivalent d'un .contrôle de l'utilisateur ascx. Il obtient sa propre copie de la publication ViewData de la page et les modifications apportées aux ViewData du RenderPartial n'affectent pas les ViewData du parent.
en utilisant la réflexion nous trouvons:
public static MvcHtmlString Partial(this HtmlHelper htmlHelper, string partialViewName, object model, ViewDataDictionary viewData)
{
MvcHtmlString mvcHtmlString;
using (StringWriter stringWriter = new StringWriter(CultureInfo.CurrentCulture))
{
htmlHelper.RenderPartialInternal(partialViewName, viewData, model, stringWriter, ViewEngines.Engines);
mvcHtmlString = MvcHtmlString.Create(stringWriter.ToString());
}
return mvcHtmlString;
}
public static void RenderPartial(this HtmlHelper htmlHelper, string partialViewName)
{
htmlHelper.RenderPartialInternal(partialViewName, htmlHelper.ViewData, null, htmlHelper.ViewContext.Writer, ViewEngines.Engines);
}
la Différence est d'abord un renvoie un MvcHtmlString
mais la deuxième ( Render..
) sorties tout droit à la réponse.
voici ce que j'ai trouvé:
Utiliser RenderAction lorsque vous ne disposez pas d'un modèle à envoyer à la vue et ont beaucoup de html pour ramener qui n'a pas besoin d'être stockée dans une variable.
Utiliser Action lorsque vous ne disposez pas d'un modèle à envoyer à la vue et avoir un peu de texte pour ramener qui doit être stockée dans une variable.
Utiliser RenderPartial quand vous avez un modèle à envoyer à la vue et il y aura beaucoup de code html qui n'a pas besoin d'être stockée dans une variable.
Utiliser Partielle quand vous avez un modèle à envoyer à la vue et il y aura un peu de texte qui doit être stockée dans une variable.
RenderAction et RenderPartial sont plus rapides.
selon moi @Html.RenderPartial()
a une exécution plus rapide que @Html.Partial()
en raison de Html.RenderPartial donne une réponse rapide à la sortie.
parce que quand j'utilise @Html.Partial()
, mon site Web prend plus de temps à charger par rapport à @Html.RenderPartial()
@Html.Partial
et "151910920 sont utilisés lors de votre vue Partielle du modèle est la correspondance de la mère modèle, nous n'avons pas besoin de créer de toute action de la méthode à appeler.
@Html.Action
et @Html.RenderAction
sont utilisés lorsque votre modèle de vue partielle sont indépendants du modèle parent, fondamentalement, il est utilisé lorsque vous voulez afficher un contenu de type widget sur la page. Vous devez créer une méthode d'action qui renvoie une vue partielle résultat tout en appelant la méthode de vue.
pour en savoir plus sur la question:
" Quand Html.RenderPartial () est appelé avec juste le nom du partial vue, ASP.NET MVC passera à la vue partielle le même modèle et ViewData dictionnaire des objets utilisés par l'appel de la vue modèle."
"NerdDinner" de Professional ASP.NET MVC 1.0
le type de retour de Html.RenderAction
est void
ce qui signifie qu'il rend directement les réponses en vue où le type de retour de Html.Action
est MvcHtmlString
vous pouvez attraper son rendu vue dans le contrôleur et le modifier en utilisant la méthode suivante
protected string RenderPartialViewToString(string viewName, object model)
{
if (string.IsNullOrEmpty(viewName))
viewName = ControllerContext.RouteData.GetRequiredString("action");
ViewData.Model = model;
using (StringWriter sw = new StringWriter())
{
ViewEngineResult viewResult = ViewEngines.Engines.FindPartialView(ControllerContext, viewName);
ViewContext viewContext = new ViewContext(ControllerContext, viewResult.View, ViewData, TempData, sw);
viewResult.View.Render(viewContext, sw);
return sw.GetStringBuilder().ToString();
}
}
renvoie la chaîne Html de la vue.
s'applique également aux Html.Partial
et Html.RenderPartial
Partielle ou RenderPartial: Pas besoin de créer une méthode d'action. utilisation lorsque les données à afficher sur la vue partielle sont déjà présentes dans le modèle de la page courante.
Action ou RenderAction: demande aux enfants méthode d'action. utiliser lorsque les données à afficher sur la vue a modèle indépendant.
différences:
-
le type de retour de
RenderPartial
estvoid
, où commePartial
retourneMvcHtmlString
-
la Syntaxe pour invoquer les
Partial()
etRenderPartial()
méthodes de Rasoir vues@Html.Partial ("PartialViewName")
@{ HTML.RenderPartial ("PartialViewName"); } -
la Syntaxe pour invoquer les
Partial()
etRenderPartial()
méthodes webform vues
[ % : Html.Partial ("PartialViewName") %]
[% HTML.RenderPartial ("PartialViewName");%]
voici les 2 questions d'entrevue courantes liées à Partial()
et RenderPartial()
Quand utiliseriez-vous Partial()
sur RenderPartial()
et vice versa?
la principale différence est que RenderPartial()
retourne nul et la sortie sera écrite directement au flux de sortie, où comme la Partial()
méthode retourne MvcHtmlString
, qui peut être assigné à une variable et la manipuler si nécessaire. Ainsi, lorsqu'il est nécessaire d'assigner la sortie à une variable pour la manipuler, utilisez Partial(), sinon utilisez RenderPartial().
que l'on est préférable pour les performances?
du point de vue de la performance, le rendu direct au flux de sortie est meilleur. RenderPartial()
fait exactement la même chose et est meilleur pour la performance que Partial()
.
Html.Partial
: retourne MvcHtmlString
et lent
Html.RenderPartial
: rendre/écrire directement sur le flux de sortie et retourne void
et c'est très rapide par rapport à Html.Partial
Pour "partielle" j'ai toujours l'utiliser comme suit:
S'il y a quelque chose que vous devez inclure dans une page que vous devez passer par le contrôleur (comme vous le feriez avec un appel Ajax) alors utilisez" Html.RenderPartial".
si vous avez une include 'statique' qui n'est pas liée à un contrôleur en soi et qui se trouve simplement dans le dossier 'shared' par exemple, utilisez " HTML.partiel "
@Html.Partial
renvoie une vue en chaîne codée HTML et utilise la même vue TextWriter
objet.
@Html.RenderPartial
cette méthode de retour void
.
@Html.RenderPartial
est plus rapide que @Html.Partial
la syntaxe pour PartialView
:
[HttpGet]
public ActionResult AnyActionMethod
{
return PartialView();
}