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


在ASP.NET MVC中,有什么区别:

  • Html.Partial 和 Html.RenderPartial
  • Html.Action 和 Html.RenderAction

924
2018-03-09 15:41


起源


stackoverflow.com/a/30258091/4336332 这也许有帮助。看一看。 - Nikhil Saswade


答案:


Html.Partial 返回一个String。 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.Action 和 Html.RenderAction


1114
2018-03-09 15:44



你知道为什么要用一个而不是另一个吗? - Jason
性能方面,最好使用RenderPartial,如下所示: stackoverflow.com/questions/2729815/... - Vlad Iliescu
感谢您将结果存储到变量中。这是在Render对应物上使用Partial或Action的原因。 - David Kassa
Html.Partial() 创建是为了使用Razor更流畅的语法。正如@Vlad所说, Html.RenderPartial() 效率更高。 - Tsahi Asher
@Tsahi解释了为什么它在_LoginPartial的MVC项目模板中使用。谢谢。 - regularmike


将@ Html.Partial视为复制到父页面的HTML代码。 将@ Html.RenderPartial视为合并到父页面中的.ascx用户控件。 .ascx用户控件的开销要大得多。

'@ Html.Partial' 返回与父级内联构造的html编码字符串。它访问父模型。

'@ Html.RenderPartial' 返回.ascx用户控件的等效项。它获得了自己的页面ViewDataDictionary副本,对RenderPartial的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);
}

77
2018-04-18 14:36



你是说Html.Partial比Html.RenderPartial有更好的表现吗? - numaroth
是和否,Html.Partial是内联呈现的,资源消耗较少,但更耗时。 Html.RenderPartial是单独渲染的,因此速度更快,但资源密集程度更高。如果您有高容量突发流量,则支持Html.Partial以减少资源使用。如果您不经常更改流量有利于Html.RenderPartial。 - Brett Jones
在我看来,它是相反的:RenderPartial肯定具有更好的性能,因为它直接写入输出流。部分内部调用相同的方法,但写入StringWriter,它作为MvcHtmlString返回,最后写入输出流。因此它分配了更多的内存。 - slfan
@BrettJones“资源密集型”是什么意思?只是因为 Partial 渲染到缓冲区并不意味着它是异步渲染的 - 恰恰相反 - 我无法看到你如何声称 RenderPartial 是“更加资源密集”。 - Dai


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


54
2018-03-09 15:44





这是我发现的:

使用 的RenderAction 当你没有模型发送到视图并有很多html带回来,不需要存储在变量中。

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

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

使用 局部 当你有一个模型发送到视图时,会有一些需要存储在变量中的文本。

的RenderAction 和 的RenderPartial 更快。


29
2017-11-18 20:55



回答(为什么?)是最好的答案,所以这对我来说是最好的。 - YEH


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

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


21
2018-02-04 04:43





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

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


14
2018-03-23 13:10



很好的答案,因为你还解释了什么时候使用Partial over Action - raklos


更多关于这个问题:

“当使用部分名称调用Html.RenderPartial()时   看来,ASP.NET MVC将传递给局部视图相同的Model和   调用视图模板使用的ViewData字典对象。“

来自Professional ASP.NET MVC 1.0的“NerdDinner”


12
2017-10-02 22:05