ASP.NET으로 프로그래밍할 때 페이지를 열려면 일반적으로 하이퍼링크 주소를 지정하고 지정된 페이지 파일(.html, .aspx) 및 기타 메서드를 호출해야 합니다.
그런데 열려고 하는 페이지 파일의 내용이 프로그램에서 동적으로 생성되거나 데이터베이스의 테이블에서 꺼내지는 경우 어떻게 그 내용을 표시할 수 있을까요?
가장 직접적인 아이디어는 콘텐츠를 웹 페이지 파일에 저장한 다음 호출하는 것입니다. 이 방법은 확실히 가능하지만 결코 사용되지 않을 수 있는 많은 임시 파일을 웹 서버에 생성하므로 최선의 방법은 아닙니다.
또 다른 가장 좋은 방법은 텍스트 형식 흐름을 사용하여 페이지 콘텐츠를 동적으로 표시하는 것입니다. 예를 들어, 다음 페이지가 있습니다:
…
<iFrame src=""></iframe>
...
페이지를 열려면 iFrame을 사용해야 하며, 이 페이지의 콘텐츠는 동적으로 생성됩니다. 처리할 .ashx 파일(여기서는 html.ashx라는 이름)을 작성할 수 있습니다. .ashx 파일은 브라우저에서 사용하는 데이터 형식을 직접 생성할 수 있는 IHttpHandler 인터페이스 클래스를 구현합니다.
html.ashx 파일 내용:
<%@ WebHandler Language="C#" Class="Handler" %>
시스템 사용;
System.IO 사용;
System.Web 사용:
공용 클래스 핸들러: IHttpHandler {
public bool IsReusable {
얻다 {
사실을 반환;
}
}
공개 무효 ProcessRequest(HttpContext 컨텍스트)
{
// 응답 설정을 구성합니다.
context.Response.ContentType = "텍스트/html";
context.Response.Cache.SetCacheability(HttpCacheability.Public);
context.Response.BufferOutput = false;
스트림 스트림 = null
string html = "<html><body>성공: 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>"))
//응답 스트림에 텍스트 스트림 쓰기
const int 버퍼 크기 = 1024 * 16;
바이트[] 버퍼 = 새 바이트[버퍼 크기];
int count = stream.Read(buffer, 0, buffersize);
동안(개수 > 0)
{
context.Response.OutputStream.Write(버퍼, 0, 개수);
개수 = stream.Read(버퍼, 0, 버퍼 크기);
}
}
}
html.ashx 파일에서는 문자열이 먼저 바이트 배열로 변환된 다음 메모리의 MemoryStream 데이터 스트림이 생성되고 마지막으로 OutputStream 객체에 기록되어 표시됩니다.
이런 식으로 <iFrame src="html.ashx"></iframe>을 통해 동적으로 생성된 페이지를 표시하고 "Success: test of txt.ashx"라는 웹페이지 내용을 표시할 수 있습니다. html.ashx 파일의 html = "<html><body>Success: test of txt.ashx</body></html>" 문자열에서 html 변수의 내용을 데이터베이스에서 얻을 수 있습니다(put 사전에 HTML 파일 내용이 데이터베이스에 저장됩니다.
저자: 장칭( http://www.why100000.com )