渲染部分和Html. Action对HTML. RenderAction

在ASP.NETMVC中,有什么区别:

  • Html.PartialHtml.RenderPartial
  • Html.ActionHtml.RenderAction
626739 次浏览

Html.Partial返回一个字符串。Html.RenderPartial在内部调用Write并返回void

基本用法是:

// Razor syntax@Html.Partial("ViewName")@{ Html.RenderPartial("ViewName");  }
// WebView syntax<%: Html.Partial("ViewName") %><% Html.RenderPartial("ViewName"); %>

在上面的代码片段中,两次调用都会产生相同的结果。

虽然可以将Html.Partial的输出存储在变量中或从方法返回,但不能可以使用Html.RenderPartial执行此操作。

结果将在执行/评估期间写入Response流。

这也适用于Html.ActionHtml.RenderAction

差异是第一个返回MvcHtmlString,但第二个(Render..)直接输出到响应。

根据我的说法,由于Html,@Html.RenderPartial()的执行速度比@Html.Partial()快。RenderParous对Output给出了快速响应。

因为当我使用@Html.Partial()时,与@Html.RenderPartial()相比,我的网站需要更多的时间来加载

将@Html. Parous视为复制到父页面的超文本标记语言代码。将@Html. RenderParous视为并入父页面的. ascx用户控件。. ascx用户控件的开销要大得多。

部分处理返回一个html编码的字符串,该字符串与父字符串内联构建。它访问父模型。

'@Html.渲染部分'返回相当于. ascx用户控件的值。它获取页面的ViewDataDicpedia的自己的副本,并且对RenderParous的ViewData所做的更改不会影响父级的ViewData。

使用反射我们发现:

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);}

Html.RenderAction的返回类型是void,这意味着它直接在View中渲染响应,其中Html.Action的返回类型是MvcHtmlString您可以在控制器中捕获其渲染视图并使用以下方法修改它

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

这将返回View的Html字符串。

这也适用于Html.PartialHtml.RenderPartial

更多关于这个问题:

"当仅使用部分的名称调用Html. RenderParous()时视图,ASP.NETMVC将传递给部分视图相同的模型和调用视图模板使用的ViewData字典对象。"

“书呆子晚餐”从专业ASP.NETMVC 1.0

Html.Partial:返回MvcHtmlString并且很慢

Html.RenderPartial:直接渲染/写入输出流并返回void,与Html.Partial相比非常快

对于“部分”,我总是使用它如下:

如果您需要在页面中包含一些您需要通过控制器访问的内容(就像您使用Ajax调用一样),那么请使用“Html. RenderParous”。

例如,如果您有一个“静态”包含没有链接到控制器本身并且仅在“共享”文件夹中,请使用“HTML.partial”

当您的部分视图模型与父模型对应时使用@Html.Partial@Html.RenderPartial,我们不需要创建任何操作方法来调用它。

当您的部分视图模型独立于父模型时使用@Html.Action@Html.RenderAction,基本上当您想在页面上显示任何小部件类型内容时使用它。您必须创建一个操作方法,该方法在从view调用该方法时返回部分视图结果。

@Html.Partial以超文本标记语言编码的字符串返回视图,并使用相同的视图TextWriter对象。@Html.RenderPartial此方法返回void@Html.RenderPartial@Html.Partial

PartialView的语法:

 [HttpGet]public ActionResult AnyActionMethod{return PartialView();}

以下是我发现的:

当您没有要发送到视图的模型并且要带回大量不需要存储在变量中的html时,请使用渲染效果

当您没有要发送到视图的模型并且需要带回一些需要存储在变量中的文本时,请使用行动

当你有一个模型要发送到视图时,使用渲染部分,并且会有很多不需要存储在变量中的html。

当您有一个模型要发送到视图并且需要将一些文本存储在变量中时,请使用部分

渲染效果渲染部分更快。

部分或渲染部分:无需创建操作方法。当要在部分视图上显示的数据已经存在于当前页面的模型中时使用。

动作或渲染动作:需要子操作方法。当要在视图上显示的数据具有独立模型时使用。

差异:

  1. RenderPartial的返回类型是void,其中Partial返回MvcHtmlString

  2. 在Razor视图中调用Partial()RenderPartial()方法的语法

    @Html。部分(“部分视图名称”)
    RenderParous"); }

  3. 在webform视图中调用Partial()RenderPartial()方法的语法

[%: html. br]部分视图") %] <[%Html. RenderParous(""); %]

以下是与Partial()RenderPartial()相关的2个常见面试问题什么时候你会使用Partial()超过RenderPartial(),反之亦然?

主要区别在于RenderPartial()返回空,输出将直接写入输出流,其中Partial()方法返回MvcHtmlString,可以将其分配给变量并在需要时对其进行操作。因此,当需要将输出分配给变量以进行操作时,请使用Parous(),否则使用RenderParous()。

哪一个对性能更好?

从性能的角度来看,直接渲染到输出流更好。RenderPartial()做了完全相同的事情,并且比Partial()的性能更好。