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>?





posted @ 2014-01-06 17:02  魏小兴  阅读(230)  评论(0)    收藏  举报