При программировании с использованием 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 {;
получать {
вернуть истину;
}
}
Public void ProcessRequest (контекст HttpContext)
{
// Настраиваем параметры ответа
context.Response.ContentType = "текст/html";
context.Response.Cache.SetCacheability(HttpCacheability.Public);
context.Response.BufferOutput = false;
Streamstream = null;
string html = "<html><body>Успех: проверка txt.ashx</body></html>";
byte[] html2bytes = System.Text.Encoding.ASCII.GetBytes(html);
поток = новый MemoryStream(html2bytes);
если (поток == null)
поток = новый MemoryStream(System.Text.Encoding.ASCII.GetBytes("<html><body>get Nothing!</body></html>"));
//Запись текстового потока в поток ответа
константный размер буфера int = 1024 * 16;
байт [] буфер = новый байт [размер буфера];
int count =stream.Read(буфер, 0, размер буфера);
пока (количество > 0)
{
context.Response.OutputStream.Write(буфер, 0, количество);
count =stream.Read(буфер, 0, размер буфера);
}
}
}
В файле html.ashx строка сначала преобразуется в массив байтов, затем генерируется поток данных MemoryStream в памяти и, наконец, записывается в объект OutputStream и отображается.
Таким образом, мы можем отобразить динамически созданную страницу через <iFrame src="html.ashx"></iframe> и отобразить содержимое веб-страницы «Успех: проверка txt.ashx». В строке html = "<html><body>Успех: проверка txt.ashx</body></html>" в файле html.ashx содержимое переменной html можно получить из базы данных (поместить html заранее. Содержимое файла сохраняется в базе данных).
Автор: Чжан Цин ( http://www.why100000.com )