ASP.NET でプログラミングする場合、通常、ページを開くには、ハイパーリンク アドレスを指定し、指定されたページ ファイル (.html、.aspx) およびその他のメソッドを呼び出す必要があります。
しかし、開こうとしているページファイルの内容がプログラム内で動的に生成されたり、データベースのテーブルから取り出された場合、どのように表示すればよいのでしょうか。
私たちの最も直接的なアイデアは、コンテンツを Web ページ ファイルに保存し、それを呼び出すことです。この方法は確かに可能ですが、Web サーバー上に使用されない可能性のある多数の一時ファイルが生成されるため、最良の方法とは言えません。
もう 1 つの最良の方法は、テキスト形式のフローを使用してページ コンテンツを動的に表示することです。たとえば、次のようなページがあります
。
<iFrame src=""></iframe>
...
ページを開くには iFrame を使用する必要があり、このページのコンテンツは動的に生成されます。処理する .ashx ファイル (ここでは html.ashx という名前) を作成できます。 .ashx ファイルは、ブラウザーで使用されるデータ形式を直接生成できる IHttpHandler インターフェイス クラスを実装します。
html.ashx ファイルの内容:
<%@ WebHandler Language="C#" Class="Handler" %>
using System;
System.IO を使用します。
System.Web を使用する;
パブリック クラス ハンドラー : IHttpHandler {
public bool IsReusable {
得る {
true を返します。
}
public void ProcessRequest (HttpContext コンテキスト
)
{
// 応答設定をセットアップします
context.Response.ContentType = "テキスト/html";
context.Response.Cache.SetCacheability(HttpCacheability.Public);
context.Response.BufferOutput = false;
ストリーム ストリーム = null;
文字列 html = "<html><body>成功: txt.ashx のテスト</body></html>";
byte[] html2bytes = System.Text.Encoding.ASCII.GetBytes(html);
ストリーム
= 新しい MemoryStream(html2bytes);
stream = new MemoryStream(System.Text.Encoding.ASCII.GetBytes("<html><body>get Nothing!</body></html>"))
// テキスト ストリームを応答ストリームに書き込みます
const int バッファサイズ = 1024 * 16;
byte[] バッファ = 新しいバイト[バッファサイズ];
int count = stream.Read(バッファ, 0, バッファサイズ);
while (カウント > 0)
{
context.Response.OutputStream.Write(バッファ, 0, カウント);
count = stream.Read(バッファ, 0, バッファサイズ);
}
、
まず文字列がバイト配列に変換され、次にメモリ内に MemoryStream データ ストリームが生成
され、最後に OutputStream オブジェクトに書き込まれて表示されます。
このようにして、動的に生成されたページを <iFrame src="html.ashx"></iframe> 経由で表示し、「成功: txt.ashx のテスト」の Web ページ コンテンツを表示できます。 html.ashx ファイルの文字列 html = "<html><body>Success: test of txt.ashx</body></html>"; では、変数 html の内容をデータベースから取得できます (putファイルの内容はデータベースに保存されます)。
著者: 張青 ( http://www.why100000.com )