1014 votes

Html.Partielle vs Html.RenderPartial Et 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

1223voto

GvS Points 28137

Html.Partial retourne une Chaîne de caractères, Html.RenderPartial des appels Write en interne, et les retours void.

L'utilisation 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 que l'on peut stocker la sortie de l' Html.Partial dans une variable ou de retour à partir d'une méthode, on ne peut pas le faire avec Html.RenderPartial. Le résultat sera écrit à l' Response flux au cours de l'exécution/évaluation.

Ceci s'applique également à l' Html.Action et Html.RenderAction.

83voto

Brett Jones Points 280

Pensez à @Html.Partiel comme du code HTML copié dans la page parent. Pensez à @Html.RenderPartial comme une .ascx de contrôle de l'utilisateur incorporé dans la page parent. Un .ascx de contrôle de l'utilisateur est beaucoup plus généraux.

'@Html.Partielle" renvoie une page html chaîne codée qui se construit en accord avec le parent. Il accède à la mère modèle.

'@Html.RenderPartial' renvoie l'équivalent d'un .ascx de contrôle de l'utilisateur. Il obtient sa propre copie de la page du ViewDataDictionary et les modifications apportées à la RenderPartial de ViewData n'ont pas d'effet du parent ViewData.

À l'aide de 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);
}

55voto

Aliostad Points 47792

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

21voto

iChirag Points 729

Selon moi, @Html.RenderPartial() a une exécution plus rapide qu' @Html.Partial() grâce à Html.RenderPartial donne une réponse rapide à la Sortie.

Parce que quand j'utilise @Html.Partial(), mon site prend plus de temps à charger comparé à d' @Html.RenderPartial()

9voto

Shivkumar Points 908

Le type de retour d' Html.RenderAction est void ce qui signifie qu'il restituer directement les réponses à la Vue de type de retour d' Html.Action est MvcHtmlString vous pouvez attraper son render view controller et le modifier aussi 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();
        }
    }

Ce sera le retour de la chaîne Html de la Vue.

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

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