在ASP.NET MVC中,有什么区别:
Html.Partial
和Html.RenderPartial
Html.Action
和Html.RenderAction
在ASP.NET MVC中,有什么区别:
Html.Partial
和 Html.RenderPartial
Html.Action
和 Html.RenderAction
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
。
将@ 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);
}
差异是第一个返回一个 MvcHtmlString
但第二(Render..
)直接输出响应。
这是我发现的:
使用 的RenderAction 当你没有模型发送到视图并有很多html带回来,不需要存储在变量中。
使用 行动 当你没有模型发送到视图并且有一些文本要带回来需要存储在变量中时。
使用 的RenderPartial 当你有一个模型发送到视图时,会有很多不需要存储在变量中的html。
使用 局部 当你有一个模型发送到视图时,会有一些需要存储在变量中的文本。
的RenderAction 和 的RenderPartial 更快。
据我说 @Html.RenderPartial()
执行速度快于 @Html.Partial()
由于Html.RenderPartial给出了对Output的快速响应。
因为我用的时候 @Html.Partial()
,我的网站需要更多的时间来加载 @Html.RenderPartial()
@Html.Partial
和 @Html.RenderPartial
当您的部分视图模型与父模型对应时使用,我们不需要创建任何操作方法来调用它。
@Html.Action
和 @Html.RenderAction
当您的局部视图模型独立于父模型时使用,基本上当您想要在页面上显示任何窗口小部件类型内容时使用它。您必须创建一个action方法,该方法在从视图调用方法时返回部分视图结果。
更多关于这个问题:
“当使用部分名称调用Html.RenderPartial()时 看来,ASP.NET MVC将传递给局部视图相同的Model和 调用视图模板使用的ViewData字典对象。“
来自Professional ASP.NET MVC 1.0的“NerdDinner”