Notice: This website is an unofficial Microsoft Knowledge Base (hereinafter KB) archive and is intended to provide a reliable access to deleted content from Microsoft KB. All KB articles are owned by Microsoft Corporation. Read full disclaimer for more details.

HOW TO: Archive the Results of a Dynamic Page to an HTML Page in ASP.NET by Using Visual C# .NET


View products that this article applies to.

For a Microsoft Visual Basic .NET version of this article, see 811162 (http://support.microsoft.com/kb/811162/EN-US/ ) .
For a Microsoft Visual Basic .NET version of this article, see 811162 (http://support.microsoft.com/kb/811162/EN-US/ ) .

↑ Back to the top


Summary

IN THIS TASK

    ↑ Back to the top


    References

    This step-by-step article describes how to retrieve the HTML results of a page as a stream and then download the stream to a file. When you use the FileStream object and set the Response.Filter property to the FileStream object, all HTTP output that Response.Write sends also downloads as stream to a file.

    Create a Web Form

    To create a Web Form:
    1. In Visual C# .NET, create a new ASP.NET Web Application project named ASPNETFilter.
    2. Right-click the designer pane of WebForm1.aspx.
    3. Click View HTML Source to edit the HTML code.
    4. Replace the existing code with the following code :
      <%@ Page language="c#" Codebehind="WebForm1.aspx.cs" AutoEventWireup="false" Inherits="ASPNETFilter.WebForm1" %>
      <HTML>
      	<HEAD>
      		<title>SaveResponse</title>
      	</HEAD>
      	<body>
      		<form id="SaveResponse" method="post" runat="server">
      			<asp:TextBox ID="TextBox1" Text="Textbox 1" Runat="server" /><br>
      			<asp:ListBox ID="Listbox1" Runat="server" Size="3">
      				<asp:ListItem Value="0">Zero</asp:ListItem>
      				<asp:ListItem Value="1" Selected="True">One</asp:ListItem>
      				<asp:ListItem Value="2">Two</asp:ListItem>
      			</asp:ListBox><br>
      			<asp:CheckBox ID="Checkbox1" Runat="server" Checked="True" Text="Checkbox 1" />
      		</form>
      	</body>
      </HTML>
      

    Create the ResponseFilter Class

    To create the ResponseFilter class:
    1. Add a new class named ResponseFilter.cs.
    2. Replace the existing code with the following code:
      using System;
      using System.IO;
      
      namespace ASPNETFilter
      {
      	public class ResponseFilter : Stream
      	{
      		private Stream m_sink;
      		private long m_position;
      		private FileStream fs;
      
      		public ResponseFilter(Stream sink)
      		{
      			m_sink = sink;
      			fs = new FileStream(@"C:\FilterOutput\response.htm", FileMode.OpenOrCreate, FileAccess.Write);
      		}
      
      		// The following members of Stream must be overriden.
      		public override bool CanRead
      		{get { return true; }}
      
      		public override bool CanSeek
      		{get { return false; }}
      
      		public override bool CanWrite
      		{get { return false; }}
      
      		public override long Length
      		{get { return 0; }}
      
      		public override long Position
      		{
      			get { return m_position; }
      			set { m_position = value; }
      		}
      
      		public override long Seek(long offset, System.IO.SeekOrigin direction)
      		{
      			return 0;
      		}
      
      		public override void SetLength(long length)
      		{
      			m_sink.SetLength(length);
      		}
      
      		public override void Close()
      		{
      			m_sink.Close();
      			fs.Close();
      		}
      
      		public override void Flush()
      		{
      			m_sink.Flush();
      		}
      
      		public override int Read(byte[] buffer, int offset, int count)
      		{
      			return m_sink.Read(buffer, offset, count);
      		}
      
      		// Override the Write method to filter Response to a file. 
      		public override void Write(byte[] buffer, int offset, int count)
      		{		
      			//Write out the response to the browser.
      			m_sink.Write(buffer, 0, count);
               
      			//Write out the response to the file.
      			fs.Write(buffer, 0, count);	
      		}
      	}
      }
      Note Before you run the Web application:
      1. Create a folder named C:\FilterOutput.
      2. Grant read and write access on the folder for the ASPNET user.

    Use the Response Filter Class

    1. In Solution Explorer, select WebForm1.aspx.
    2. Right-click and then select View Code.
    3. Add the following code to theOnInit event code:
      Response.Filter = new ResponseFilter(Response.Filter);

    Test the ResponseFilter

    1. Save the changes to the ASPNETFilter Web project.
    2. On the Build menu, select Build Solution.
    3. Start Microsoft Internet Explorer, and then open WebForm1.aspx by specifying the following URL, where IISServerName is the name of your Microsoft Internet Information Services (IIS) server:
      http://IISServerName/ASPNETFilter/WebForm1.aspx
    4. Find the Response.htm file in the C:\FilterOutput folder.

    ↑ Back to the top


    Keywords: KB810205, kbhowto, kbfileio, kbwebforms

    ↑ Back to the top

    Article Info
    Article ID : 810205
    Revision : 8
    Created on : 5/21/2003
    Published on : 5/21/2003
    Exists online : False
    Views : 294