程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> ASP.NET >> 關於ASP.NET >> ASP.NET 2.0裡輸出文本格式流

ASP.NET 2.0裡輸出文本格式流

編輯:關於ASP.NET

在用 ASP.NET 編程時,打開一個頁面一般是通過指定超鏈接地址,調用指定的頁面文件(.html、.aspx)等方法。

但是,如果即將打開的頁面文件的內容是在程序中動態生成,或者是從數據庫的表裡取出的,我們怎麼把這些內容展示出來呢?

我們最直接的想法是,把這些內容先保存成網頁文件,再調用它。這種方法當然是可以的,但不是最好的方法,因為這樣會在 Web 服務器上生成

許多臨時文件,這些文件可能永遠也用不著了。

另一種最好的方法是利用文本格式流,把頁面內容動態地展示出來。例如,有一個頁面:

  ……
  <iFrame src=""></iframe>
  ……

需要用 iFrame 打開一個頁面,這個頁面的內容是動態生成的。我們可以寫一個 .ashx 文件(這裡命名為 html.ashx)來處理。.ashx 文件裡實現了 IHttpHandler 接口類,可以直接生成浏覽器使用的數據格式。

html.ashx 文件內容:

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 = "成功: test of txt.ashx";
byte[] html2bytes = System.Text.Encoding.ASCII.GetBytes(html);
stream = new MemoryStream(html2bytes);
if (stream == null)
stream = new MemoryStream(System.Text.Encoding.ASCII.GetBytes("get Nothing!"));
//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 = "成功: test of txt.ashx"; 一句中,變量 html 的內容完全可以從數據庫中得到(事先把一個 html 文件內容保存在數據庫中)。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved