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
来完成此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..
)直接输出到响应。
上一篇: Html.Partial vs Html.RenderPartial & Html.Action vs Html.RenderAction
下一篇: Difference between InvariantCulture and Ordinal string comparison