Click here to Skip to main content
65,938 articles
CodeProject is changing. Read more.
Articles / web / HTML

Parse out controls from your html page.

4.83/5 (6 votes)
24 Oct 2011CPOL 30.7K  
Parse out controls from your html page.
steps:
-Override Render on your page ( In this excel export example we do this in a base class )
-Go through all the controls with Findcontrols and find the control type your looking for
-Render specific controls to a list of strings
-render page to string
-remove specific controls html from page.

using System;
using System.Data;
using System.Configuration;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Threading;
using System.Net;
using System.IO;
using System.Collections.Generic;
using System.Text;
/// <summary>
/// Summary description for ReportBase
/// </summary>
public class ReportBase : Page
{
    const string ExcelExport = "ExcelExport";
   
    public ReportBase()
    {
        this.Load += new EventHandler(ReportBase_Load);
    }
    void ReportBase_Load(object sender, EventArgs e)
    {
        if (!Page.IsPostBack)
        {
            Session.Add(ExcelExport, Request.QueryString[ExcelExport]);
        }
        
    }
    protected override void Render(HtmlTextWriter writer)
    {
        if (Session[ExcelExport] != null && bool.Parse(Session[ExcelExport].ToString()))
        {
            List<Control> flatList = Utilities.FindControls(this);
            List<string> removeList = new List<string>();
            
            foreach (Control item in flatList)
            {
                if (item.GetType() == typeof(Image))
                {
                    removeList.Add(RenderControlToHtmlString(item));
                }
            }
            StringBuilder html = null;
            using (System.IO.StringWriter stringWrite = new System.IO.StringWriter())
            {
                using (HtmlTextWriter htmlWrite = new HtmlTextWriter(stringWrite))
                {
                    base.Render(htmlWrite);
                    html = new StringBuilder(stringWrite.ToString());
                }
            }
            foreach (var item in removeList)
            {
                html.Replace(item, String.Empty);
            }
            Download(html.ToString());
        }
        else
        {
            base.Render(writer);
        }
    }

    public void Download(string text)
    {
        try
        {
            HttpResponse response = Page.Response;
            response.Clear();
            // for excel
            //response.AddHeader("cache-control", "must-revalidate");
            //response.ContentType = "application/vnd.ms-excel";
            response.Write(text); 
            response.Flush();
            response.End();
        }
        catch (ThreadAbortException)
        {
            //If the download link is pressed we will get a thread abort.
        }
    }

    public static string RenderControlToHtmlString(Control ctrl)
    {
        StringBuilder sb = new StringBuilder();
        StringWriter tw = new StringWriter(sb);
        HtmlTextWriter hw = new HtmlTextWriter(tw);
        ctrl.RenderControl(hw);
        return sb.ToString();
    }

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)