当前位置: 首页 > 图文教程 > 网络编程 > ASP.NET > ASP.NET 2.0 里输出文本格式流

ASP.NET
FreeTextBox(版本3.1.6)在ASP.Net 2.0中使用方法
.NET 常用功能和代码小结
在 .NET Framework 2.0 中未处理的异常导致基于 ASP.NET 的应用程序意外退出
asp.net IList查询数据后格式化数据再绑定控件
asp.net sql存储过程
asp.net 简单实现禁用或启用页面中的某一类型的控件
asp.net(c#)获取内容第一张图片地址的函数
The remote procedure call failed and did not execute的解决办法
ASP.NET 在线文件管理
asp.net 读取并修改config文件实现代码
ASP.NET Cookie 操作实现
asp.net Silverlight中的模式窗体
Silverlight中动态获取Web Service地址
asp.net Silverlight应用程序中获取载体aspx页面参数
asp.net 水晶报表隔行换色实现方法
asp.net 获取Gridview隐藏列的值
手动把asp.net的类生成dll文件的方法
asp.net 使用ObjectDataSource控件在ASP.NET中实现Ajax真分页
动态指定任意类型的ObjectDataSource对象的查询参数
asp.net Md5的用法小结

ASP.NET 2.0 里输出文本格式流


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-08-14   浏览: 153 ::
收藏到网摘: n/a

在用 ASP.NET 编程时,打开一个页面一般是通过指定超链接地址,调用指定的页面文件(.html、.aspx)等方法。

但是,如果即将打开的页面文件的内容是在程序中动态生成,或者是从数据库的表里取出的,我们怎么把这些内容展示出来呢?
我们最直接的想法是,把这些内容先保存成网页文件,再调用它。这种方法当然是可以的,但不是最好的方法,因为这样会在 Web 服务器上生成
许多临时文件,这些文件可能永远也用不着了。

另一种最好的方法是利用文本格式流,把页面内容动态地展示出来。例如,有一个页面:

需要用 iFrame 打开一个页面,这个页面的内容是动态生成的。我们可以写一个 .ashx 文件(这里命名为 html.ashx)来处理。.ashx 文件里实现了 IHttpHandler 接口类,可以直接生成浏览器使用的数据格式。

html.ashx 文件内容:

以下为引用的内容:
<%@ WebHandler Language="C#" Class="Handler" %>

    using System;
    using System.IO;
    using System.Web;

    public class Handler : IHttpHandler {

     public bool IsReusable {
      get {
       return true;
      }
     }

     public void ProcessRequest (HttpContext context)
        {
      // Set up the response settings
      context.Response.ContentType = "text/html";
      context.Response.Cache.SetCacheability(HttpCacheability.Public);
      context.Response.BufferOutput = false;

      Stream stream = null;

        string html = "<html><body>成功: test of txt.ashx</body></html>";
        byte[] html2bytes = System.Text.Encoding.ASCII.GetBytes(html);

        stream = new MemoryStream(html2bytes);

      if (stream == null)
            stream = new MemoryStream(System.Text.Encoding.ASCII.GetBytes("<html><body>get Nothing!</body></html>"));

      //Write text stream to the response stream
      const int buffersize = 1024 * 16;
      byte[] buffer = new byte[buffersize];
      int count = stream.Read(buffer, 0, buffersize);
        while (count > 0)
        {
        context.Response.OutputStream.Write(buffer, 0, count);
       count = stream.Read(buffer, 0, buffersize);
      }
     }

    }

html.ashx 文件中首先把 string 字符串转化为字节(byte)数组,然后再生成内存中的 MemoryStream 数据流,最后写到 OutputStream 对象中,显示出来。

这样以来,我们就可以通过 <iFrame src="html.ashx"></iframe> 来展示动态生成的页面,显示“成功: test of txt.ashx”的网页内容。html.ashx 文件中 string html = "<html><body>成功: test of txt.ashx</body></html>"; 一句中,变量 html 的内容完全可以从数据库中得到(事先把一个 html 文件内容保存在数据库中)。