Asp – Linkbutton not rendering correctly inside a custom web control

asp.net

I have the following set up

Custom Control 1 – MyListControl
– Nested Collection of – MyListItemControl

MyListItemControl inherits from a Panel so I can write this:

<cc1:MyListControl ID="MyListControl1" runat="server">
   <ListItems>
      <cc1:MyListItemControl ID="MyListItemControl1" runat="server" CustomProperty="1">
          <asp:LinkButton ID="LinkButton1" runat="server" CommandName="Edit">Edit</asp:LinkButton>
      </cc1:MyListItemControl>
    </ListItems>
</cc1:MyListControl>

I get no error and the Control does render, just not correctly. The above code if placed inside a Formview , the linkbutton does not get the PostBack script all that gets rendered is

<a id="LinkButton1">Edit</a>

Does anyone know why this is happening and the linkbutton is not being rendered as it normally would?

TIA

Andrew

Best Answer

To me, looks like a bug in ASP.Net that has to do with the LinkButton order in its parent's Controls collection.

This snippet:

    protected override void OnLoad(EventArgs e)
    {
        // show some data
        _l = new Label();
        _l.Visible = false;
        _l.Text = "Current Web's Url: " + SPContext.Current.Web.Url;
        Controls.Add(_l);

        // add a button with some processing
        _lb = new LinkButton();
        _lb.Text = "Click here";
        _lb.Click += new EventHandler(_lb_Click);
        Controls.Add(_lb);
    }

Generates this HTML:

<span id="ctl00_PlaceHolderMain_ads1"><h1>This is a custom control</h1><span>Current Web's Url: http://arielki03:9999/sites/ads</span><a href="javascript:__doPostBack('ctl00$PlaceHolderMain$ctl01','')">Click here</a></span>

But this snippet (just inverted the order in which I'm adding the controls above, so LinkButton is first):

    protected override void OnLoad(EventArgs e)
    {
        // add a button with some processing
        _lb = new LinkButton();
        _lb.Text = "Click here";
        _lb.Click += new EventHandler(_lb_Click);
        Controls.Add(_lb);

        // show some data
        _l = new Label();
        _l.Visible = false;
        _l.Text = "Current Web's Url: " + SPContext.Current.Web.Url;
        Controls.Add(_l);
    }

Doesn't show neither control!!!

The problem seems to be with LinkButton being the first in the parent's Controls collection. Workaround: add an empty Label before it, it gonna work :-)

Related Topic