阿不

潜水

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
  212 随笔 :: 0 文章 :: 3078 评论 :: 107万 阅读
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

在即将发布的Kooboo CMS 2.1.0.0中,将会升级到ASP.NET MVC 2。需要将所有的Module也同步升级到MVC2,在升级过程中发现MVC2一旦进入View输出阶段后,Response.Clear将会不起作用(Controller执行阶段,这个方法仍然正常工作),这将会影响Kooboo  CMS Module的正常运行。

在确定是MVC 2引起的问题后,于是就从Response.Clear这个方法着手,它的代码逻辑如下:

在这里判断,_httpWriter和_writer变量是否相同。于是我就只能从运行时的调试来看看这两个变量的值分别是什么,下面的截图分别是_httpWriter,_writer,UsingHttpWriter运行时的值:

Capture

 

在这里我们会发现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的简单包装而已,并没有增加其它额外的功能。我目前实在还是想不明白为什么要这样做?

posted on   阿不  阅读(2399)  评论(2编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· [AI/GPT/综述] AI Agent的设计模式综述
点击右上角即可分享
微信分享提示