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

In ASP.NET MVC, Quelle est la différence entre:

  • Html.Partial et Html.RenderPartial
  • Html.Action et Html.RenderAction
938
demandé sur abatishchev 2011-03-09 18:41:24
la source

13 ответов

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 .

1130
répondu GvS 2016-05-13 15:40:22
la source

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);
}
77
répondu Brett Jones 2014-06-14 05:55:44
la source

la Différence est d'abord un renvoie un MvcHtmlString mais la deuxième ( Render.. ) sorties tout droit à la réponse.

55
répondu Aliostad 2011-03-09 18:44:15
la source

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.

34
répondu David 2015-11-18 23:55:46
la source

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()

21
répondu iChirag 2013-10-31 15:28:50
la source

@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.

15
répondu Jayesh Patel 2015-09-28 12:35:35
la source

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

12
répondu Ygor Thomaz 2016-06-07 11:52:41
la source

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

"
8
répondu Shivkumar 2015-09-28 12:51:56
la source

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.

7
répondu Anil 2016-02-07 15:58:46
la source

différences:

  1. le type de retour de RenderPartial est void , où comme Partial retourne MvcHtmlString

  2. la Syntaxe pour invoquer les Partial() et RenderPartial() méthodes de Rasoir vues

    @Html.Partial ("PartialViewName")

    @{ HTML.RenderPartial ("PartialViewName"); }

  3. la Syntaxe pour invoquer les Partial() et RenderPartial() 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() .

7
répondu Nazmul Hasan 2016-05-13 07:03:48
la source

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

5
répondu Navneet 2014-08-25 19:26:36
la source

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 "

2
répondu scgough 2015-03-11 00:48:36
la source

@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();
 }
1
répondu Mayank 2018-07-12 01:57:29
la source