ASP.Net 4.0中新增23项功能
在即将发布的Kooboo CMS 2.1.0.0中,将会升级到ASP.NET MVC 2。需要将所 有的Module也同步升级到MVC2,在升级过程中发现MVC2一旦进入View输出阶段后 ,Response.Clear将会不起作用 (Controller执行阶段,这个方法仍然正常工作) ,这将会影响Kooboo CMS Module的正常运行。 在确定是MVC 2引起的问题后,于是就从Response.Clear这个方法着手,它的 代码逻辑如下:
从这段代码,我们可以发现,ClearBuffer的条件是UsingHttpWriter这个属性 的值为True,下面是UsingHttpWriter属性的原型定义:</font>
在这里判断,_httpWriter和_writer变量是否相同。于是我就只能从运行时的 调试来看看这两个变量的值分别是什么,下面的截图分别是_httpWriter, _writer,UsingHttpWriter运行时的值: 在这里我们会发现UsingHttpWriter的值为fase,并且_writer的对象类型为 System.Web.Mvc.ViewPage.SwitchWriter,此时我们就可以断定Response.Clear 起作用的原因就是由 SwitchWriter这个类为引起的。找到这个类,我们会发现它 在ViewPage.RenderView(ViewContext viewContext)方法中被使用:
而对应的方法在MVC 1.0中,它的实现是这样的:
于是我 们就找到解决这个问题的办法了,我们只要在我们项目的ViewPage中,重新 RenderView(ViewContext viewContext)这个方法, 让它回到原来的实现就可以 解决这个问题了。 这个问题解决了,但是另一个问题我现在仍在思考当中 ,为什么在MVC2中,要增加SwitchWriter这个类呢?我仔细了看了好几遍这个类 的实现,只是对TextWriter的简单包装而已,并没有增加其它额外的功能。我目 前实在还是想不明白为什么要这样做? http://hjf1223.cnblogs.com |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |