ASP.NET MVC Html.RenderPartial 和 Html.Partial Html.RenderAction 和 Html.Action区别
1.先比较 Html.RenderPartial和 Html.Partial
Html.RenderPartial源代码:
// Renders the partial view with a copy of the given view data plus the given model public static void RenderPartial(this HtmlHelper htmlHelper, string partialViewName, object model, ViewDataDictionary viewData) { htmlHelper.RenderPartialInternal(partialViewName, viewData, model, htmlHelper.ViewContext.Writer, ViewEngines.Engines); }
Html.Partial源代码:
public static MvcHtmlString Partial(this HtmlHelper htmlHelper, string partialViewName, object model, ViewDataDictionary viewData) { using (StringWriter writer = new StringWriter(CultureInfo.CurrentCulture)) { htmlHelper.RenderPartialInternal(partialViewName, viewData, model, writer, ViewEngines.Engines); return MvcHtmlString.Create(writer.ToString()); } }
通过源码,发现它们两者都调用了
htmlHelper.RenderPartialInternal
不同的是Html.Partial创建了MvcHtmlString并且返回。
结论:
1.因为Html.Partial创建了String,肯定在String的length较大时,性能会明显较差。
2.Html.Partail适合返回少量字符串的操作,然后在View中,可以对字符串进行适量的判断或者操作。
2.Html.RenderAction 和 Html.Action 区别其实同上。
这里不再贴源代码,我把方法体贴一下:
public static void RenderAction(this HtmlHelper htmlHelper, string actionName); public static MvcHtmlString Action(this HtmlHelper htmlHelper, string actionName);
区别同样也是:
一个返回值为String,一个为void.
返回值为void的其实直接把文本输出到View中,而不是返回一个String,显然返回String的性能要差一些。
3.Html.RenderPartial和Html.RenderAction区别:
Html.RenderAction机制如下:

在Html.RenderAction中,其实又发起了一个Action。
但Html.RenderAction 可以更好的帮我们解耦。
比如可以考虑的场景如下:
如果整个网站的每个页面都需要显示一个动态的目录或者导航栏,可以使用Html.RenderAction,不然每个ViewModel可能都需要绑定一个IList<Category>?

浙公网安备 33010602011771号