mmtemporary
mmtemporary

Reputation: 37

Accees to dynamically added HTML tages to ASP.NET page

I add dynamically html code in page load to section of page. like this:

 protected void Page_Load(object sender, EventArgs e)
{
    //HTML file
    string file = Server.MapPath("~/ProductsF/DetailFiles/"+Request.QueryString["Page"]);        
    FileInfo fi = new FileInfo(file);
    HtmlGenericControl hgc = new HtmlGenericControl();
    if (File.Exists(file))
    {
        //load html file
        StreamReader sr = File.OpenText(file);
        hgc.InnerHtml = sr.ReadToEnd();            
        sr.Close();
        sr.Dispose();
    }
    this.ContentPanel.Controls.Add(hgc);
}

but i want to access some html control in prerender event and change some attribute. but i can't to access those html controls.

protected override void OnPreRender(EventArgs e)
{
    MakeAllUrlFullyQualified(Page);
    base.OnPreRender(e);
}


private void MakeAllUrlFullyQualified(Control control)
{
    if (control.HasControls())
    {
        foreach (Control child in control.Controls)
            MakeAllUrlFullyQualified(child);
    }

    if (control is HtmlAnchor)
    {
        HtmlAnchor anchor = control as HtmlAnchor;
        anchor.HRef = WebHelper.GetFullyUri(ResolveUrl(anchor.HRef));
    }
    else if (control is HtmlImage)
    {
        HtmlImage image = control as HtmlImage;
        image.Src = WebHelper.GetFullyUri(ResolveUrl(image.Src));
    }
    else if (control is HtmlLink)
    {
        HtmlLink link = control as HtmlLink;
        link.Href = WebHelper.GetFullyUri(ResolveUrl(link.Href));
    }
}

what is wrong in this code?

Upvotes: 1

Views: 364

Answers (1)

Oded
Oded

Reputation: 499002

You are adding HTML to your page through the HtmlGenericControl.InnerHTML property. You are not adding controls to it.

The only control you are adding is the HtmlGenericControl (hgc), but you are not adding any others.

Look through the documentation on User Controls and Master Pages to see how to properly template a website in ASP.NET

Edit:

To access the HTML you are adding, you can do the following:

if (control is HtmlGenericControl)
{
    HtmlGenericControl myGenericControl = control as HtmlGenericControl;
    string innerHtml = myGenericControl.InnerHtml;
}

What you can't do is convert the HTML to controls.

Upvotes: 1

Related Questions