Dans ASP.NET MVC, quelle est la différence entre:
-
Html.Partial
etHtml.RenderPartial
-
Html.Action
etHtml.RenderAction
Dans ASP.NET MVC, quelle est la différence entre:
Html.Partial
et Html.RenderPartial
Html.Action
et Html.RenderAction
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
.
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);
}
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 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.