博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
mvc4 -@Html.Partial,@Html.RenderPartial
阅读量:6280 次
发布时间:2019-06-22

本文共 2238 字,大约阅读时间需要 7 分钟。

两者都可以输出一个Partial视图;其区别如下: 1. Partial有返回值(MvcHtmlString);RenderPartial没有返回值(Void)。

先看看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());            }        }

会创建一个MvcHtmlString对象返回,具体的就是实例化一个带有一个value参数的MvcHtmlString对象返回,这个value参数就是调用到的部分视图下的字符串。

而RenderPartial方法:

public static void RenderPartial(this HtmlHelper htmlHelper, string partialViewName)        {            htmlHelper.RenderPartialInternal(partialViewName, htmlHelper.ViewData, null /* model */, htmlHelper.ViewContext.Writer, ViewEngines.Engines);        }

从这两行代码可以看到都调用的是htmlHelper.RenderPartialInternal方法,一个将输出的字符串用MvcHtmlString封装了下,具体看看htmlHelper.RenderPartialInternal方法里做了些什么:

view.Render(newViewContext, writer);

上面那个方法是最后的调用该方法需要的参数是ViewContext和TextWriter对象,其实就是相关联的上下文和字符串文本。而这个方法里又调用了它

public void Render(ViewContext viewContext, TextWriter writer)        {           ...            object instance = null;           ...            }            RenderView(viewContext, writer, instance);        }

这里第三个参数的创建过程在此可以不用考虑,

protected override void RenderView(ViewContext viewContext, TextWriter writer, object instance)        {            ...            WebViewPage webViewPage = instance as WebViewPage;                        ...            webViewPage.OverridenLayoutPath = LayoutPath;            webViewPage.VirtualPath = ViewPath;            webViewPage.ViewContext = viewContext;            webViewPage.ViewData = viewContext.ViewData;            ....            webViewPage.InitHelpers();            ...              webViewPage.ExecutePageHierarchy(new WebPageContext(context: viewContext.HttpContext, page: null, model: null), writer, startPage);        }

上面可以看到会将参数instance强制转换为webViewPage对象。该对象下的InitHelpers()我们懂的,就是给页面上那几个Html/Ajax/Url属性赋值。

 

@Html.Partial("test")@{    Html.RenderPartial("test"); }

上图两个调用将会呈现一样的效果。

转载于:https://www.cnblogs.com/zcm123/archive/2013/06/07/3123335.html

你可能感兴趣的文章
Mellanox公司计划利用系统芯片提升存储产品速度
查看>>
白帽子守护网络安全,高薪酬成大学生就业首选!
查看>>
ARM想将芯片装进人类大脑 降低能耗是一大挑战
查看>>
Oracle数据库的备份方法
查看>>
Selenium 自动登录考勤系统
查看>>
关于如何以编程的方式执行TestNG
查看>>
智能照明造福千家万户 家居智能不再是梦
查看>>
物联网如何跳出“看起来很美”?
查看>>
浅谈MySQL 数据库性能优化
查看>>
《UNIX/Linux 系统管理技术手册(第四版)》——1.10 其他的权威文档
查看>>
灵动空间 创享生活
查看>>
《UNIX网络编程 卷1:套接字联网API(第3版)》——8.6 UDP回射客户程序:dg_cli函数...
查看>>
不要将时间浪费到编写完美代码上
查看>>
《第一桶金怎么赚——淘宝开店创业致富一册通》一一第1章 创业梦想,怎样起步...
查看>>
基于容器服务的持续集成与云端交付(三)- 从零搭建持续交付系统
查看>>
《算法基础:打开算法之门》一3.4 归并排序
查看>>
高德开放平台开放源代码 鼓励开发者创新
查看>>
《高并发Oracle数据库系统的架构与设计》一2.5 索引维护
查看>>
《Exchange Server 2010 SP1/SP2管理实践》——2.4 部署外部网络环境
查看>>
Firefox 是 Pwn2own 2014 上攻陷次数最多的浏览器
查看>>