2010-11-10 57 views
0

小僞代碼內提供一些背景:佔位一個UpdatePanel

  1. 我有一個ASPX使用佔位符和一個按鈕
  2. 當點擊了按鈕它增加了一個web用戶控件(UC1)至我的佔位符
  3. 在UC有一個按鈕
  4. 點擊時它增加了一個不同的用戶控件(UC2)到佔位符

單步執行代碼,如果我在#4按鈕單擊之前和之後查看placeholder.controls.count,則計數會增加1,如您所期望的那樣。

問題是在#4中添加的uc2沒有出現在屏幕上。所以,我在UpdatePanel中包裝了佔位符。我以前從未使用過。所以,我可以在添加uc2之後刷新佔位符。

相關ASPX代碼

<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> 

相關ASCX代碼

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) 

我想這...

up.Update() 

這...

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

目標是刷新佔位符,以便新的ctrlAttributes顯示在屏幕上。

+1

這段代碼太糟糕了,原因很多,它讓我感到不安。你知道你可以使用Me.phAttributes和Me.UpdatePanel1來獲取控件,而不是所有的For循環? – batwad 2010-11-10 16:53:41

回答

1

首先,使用Parent.FindControl而不是foreach-es這個混亂。

+0

謝謝,我作出了改變......我應該知道更好的...... – s15199d 2010-11-11 14:53:23

+0

有關更新面板的任何想法? – s15199d 2010-11-11 14:53:50