首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何查看HTMLTextWriter的内容?

如何查看HTMLTextWriter的内容?
EN

Stack Overflow用户
提问于 2013-04-16 05:42:12
回答 1查看 2K关注 0票数 1

我有一个HtmlTextWriter对象(theWriter)被传递给一个方法。此方法位于中间层。我想在调试模式下读取theWriter的内容。方法是:

代码语言:javascript
复制
protected override void Render (HtmlTextWriter theWriter) {...}

它继承自Panel:WebControl。

我试过了

代码语言:javascript
复制
theWriter.Flush();
theWriter.InnerWriter.ToString();

但这只输出对象类型:"System.Web.HttpWriter“。我见过一些在响应对象上使用方法的例子。但是我不能访问这一层的响应。有什么想法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-04-16 05:53:09

InnerWriter是一个TextWriter-derived类,它写入流。您必须打开该流并从中读取数据。您是否可以打开和读取该流是一个悬而未决的问题,这在很大程度上取决于它是什么类型的流。

因此,为了使用您的示例,theWriter.InnerWriter是从TextWriter派生的对象。但是您不知道是哪种类型,而且TextWriter本身并不公开底层流。

现在,如果InnerWriter是一个StreamWriter,那么你可以这样写:

代码语言:javascript
复制
var sWriter = theWriter.InnerWriter as StreamWriter;
var stream = sWriter.BaseStream;
var savePosition = stream.Position;
stream.Position = 0;
// now, you can read the stream
// when you're done reading the stream, be sure to reset its position
stream.Position = savePosition;

不过,你必须非常小心。如果您获取基流,然后使用StreamReader打开它,则关闭StreamReader将关闭底层流。然后,您的HtmlTextWriter将在您下次尝试写入它时抛出异常。

也有可能你将无法读取流。例如,如果基流是一个NetworkStream,你就不能读取它。或者它可以是一个只允许写入的FileStream。没有很好的通用方法可以做到这一点,因为它不仅完全依赖于特定的TextWriter-derived类,而且还依赖于TextWriter写入的流。

例如,HtmlTextWriter可以写入StreamWriter,该BufferedStream连接到连接到GZipStreamGZipStream,最后写入MemoryStream

所以,总的来说,我建议你寻找其他的解决方案来解决你的问题。除非您确实知道底层流是什么,并且您可以读取它...并且事情不会在你身上意外地改变。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16025187

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档