s15199d
s15199d

Reputation: 7717

Placeholder inside an UpdatePanel

A little pseudo code to provide some background:

  1. I have an ASPX with a placeholder and a button
  2. When the button is clicked it adds a web user control (uc1) to my placeholder
  3. The uc has a button
  4. When clicked it adds a different user controls (uc2) to the placeholder

Stepping through the code, if I look at the placeholder.controls.count before and after the button-click in #4 the count increases by one, as you would expect.

The problem is that the uc2 added in #4 doesn't appear on the screen. So, I wrapped my placeholder in an UpdatePanel. I've never used one before. So, I could refresh the placeholder after the uc2 was added.

relevant ASPX code

<ajaxToolkit:ToolkitScriptManager ID="ToolkitScriptManager1" runat="server></ajaxToolkit:ToolkitScriptManager>
    <ajaxToolkit:TabContainer ID="tcNavigation" runat="server" ActiveTabIndex="0">
    <ajaxToolkit:TabPanel ID="tpWebMerchandising" runat="server" HeaderText="WEB">
                    <ContentTemplate>
                        <table cellpadding="3" cellspacing="0" border="0">
                            <tr>
                                <td valign="top" class="label">Attributes</td>
                                <td>
                                    <asp:UpdatePanel runat="server" id="UpdatePanel1" updatemode="Conditional">
                                        <ContentTemplate>
                                            <asp:PlaceHolder ID="phAttributes" runat="server"></asp:PlaceHolder><br />
                                        </ContentTemplate>
                                    </asp:UpdatePanel>

                                    <asp:Button ID="btnAddAttribute" runat="server" Text="Add Attribute" /> | <asp:Button ID="btnCreateAttribute" runat="server" Text="Create Attribute" />
                                </td>
                            </tr>
                        </table>
                    </ContentTemplate>
                </ajaxToolkit:TabPanel>
            </ajaxToolkit:TabContainer>

relevant ASCX code

For Each ctrl As Control In Parent.Page.Controls
               For Each ctrl2 As Control In ctrl.Controls
                    For Each ctrl3 As Control In ctrl2.Controls
                         For Each ctrl4 As Control In ctrl3.Controls
                              For Each ctrl5 As Control In ctrl4.Controls
                                   If InStr(ctrl5.GetType.ToString(), "UpdatePanel") > 0 Then 'UPDATE PANEL
                                        up = ctrl5
                                   End If
                                   For Each ctrl6 As Control In ctrl5.Controls 'CONTENT TEMPLATE
                                        For Each ctrl7 As Control In ctrl6.Controls 'PLACE HOLDER
                                             If ctrl7.GetType.ToString() = "System.Web.UI.WebControls.PlaceHolder" Then
                                                  phAttributes = ctrl7
                                             End If
                                        Next
                                   Next
                              Next
                         Next
                    Next
               Next
          Next

Dim ctrlAttributes As New AttributeControl
ctrlAttributes.AttributeName = attrName
ctrlAttributes.AttributeValue = attrValue
ctrlAttributes.ID = "ctrlAttribute-" & attrName
phAttributes.Controls.Add(ctrlAttributes)

I tried this...

up.Update()

and this...

Me.Page.RegisterStartupScript("AutoPostBackScript", "__doPostBack('UpdatePanel1', '');")

The goal is to refresh the placeholder so the new ctrlAttributes is displayed on screen.

Upvotes: 0

Views: 2031

Answers (1)

Scottie
Scottie

Reputation: 11308

First of all, use Parent.FindControl instead of this mess of foreach-es.

Upvotes: 1

Related Questions