2010-01-13 129 views
0

我正在開發一個ASP.NET Web應用程序與WebForms和C#。防止卸載控件動態加載

我有這個aspx頁面:

<body> 
    <form id="form1" runat="server"> 
     <asp:ScriptManager ID="ScriptManager1" runat="server"> 
     </asp:ScriptManager> 
    <div id="divBody"> 
     <div id="divHeader"> 
      <asp:Button ID="Edit" runat="server" Text="Editar" onclick="Edit_Click" /> 
     </div> 
     <div id="leftColumn"> 
      <asp:UpdatePanel ID="UpdatePanelLeft" runat="server"> 
       <ContentTemplate> 
        <asp:Label ID="TryText" runat="server"></asp:Label> 
        <asp:TreeView ID="DestinationTree" runat="server" ImageSet="Simple"> 
         <ParentNodeStyle Font-Bold="False" /> 
         <HoverNodeStyle Font-Underline="True" ForeColor="#5555DD" /> 
         <SelectedNodeStyle Font-Underline="True" ForeColor="#5555DD" 
          HorizontalPadding="0px" VerticalPadding="0px" /> 
         <Nodes> 
          <asp:TreeNode Text="Raiz" Value="Raiz"> 
           <asp:TreeNode Text="Destino_1" Value="Destino_1"> 
            <asp:TreeNode Text="Punto_1_1" Value="Punto_1_1"> 
             <asp:TreeNode Text="Contenido_1_1_1" Value="Contenido_1_1_1"></asp:TreeNode> 
             <asp:TreeNode Text="Contenido_1_1_2" Value="Contenido_1_1_2"></asp:TreeNode> 
            </asp:TreeNode> 
            <asp:TreeNode Text="Punto_1_2" Value="Punto_1_2"> 
             <asp:TreeNode Text="Contenido_1_2_1" Value="Contenido_1_2_1"></asp:TreeNode> 
            </asp:TreeNode> 
           </asp:TreeNode> 
           <asp:TreeNode Text="Destino_2" Value="Destino_2"> 
            <asp:TreeNode Text="Punto_2_1" Value="Punto_2_1"></asp:TreeNode> 
            <asp:TreeNode Text="Punto_2_2" Value="Punto_2_2"> 
             <asp:TreeNode Text="Contenido_2_2_1" Value="Contenido_2_2_1"></asp:TreeNode> 
            </asp:TreeNode> 
           </asp:TreeNode> 
          </asp:TreeNode> 
         </Nodes> 
         <NodeStyle Font-Names="Tahoma" Font-Size="10pt" ForeColor="Black" 
          HorizontalPadding="0px" NodeSpacing="0px" VerticalPadding="0px" /> 
        </asp:TreeView> 
       </ContentTemplate> 
      </asp:UpdatePanel> 
     </div> 
     <div id="rightColumn"> 
      <asp:UpdatePanel ID="UpdatePanelRight" runat="server"> 
       <ContentTemplate> 
        <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label> 
       </ContentTemplate> 
       <Triggers> 
        <asp:AsyncPostBackTrigger ControlID="Edit" EventName="Click" /> 
       </Triggers> 
      </asp:UpdatePanel> 
     </div> 
    </div> 
    </form> 
</body> 

它與兩列的標題:在左邊的列有一個TreeView,並在左邊有什麼(現在有一個標籤,以嘗試的事情我想要做的)。

當用戶在樹形視圖上選擇一個節點時,點擊編輯按鈕。點擊事件的代碼是:

protected void Edit_Click(object sender, EventArgs e) 
{ 
    if ((DestinationTree.SelectedNode != null) && 
     (DestinationTree.SelectedNode.Depth > 0)) 
    { 
     BaseControl baseControl = new BaseControl(); 
     UpdatePanelRight.ContentTemplateContainer.Controls.Clear(); 

     switch (DestinationTree.SelectedNode.Depth) 
     { 
      case 1: 
       baseControl = (BaseControl)LoadControl("~/DynamicControls/Control1.ascx"); 
       break; 
      case 2: 
       baseControl = (BaseControl)LoadControl("~/DynamicControls/Control2.ascx"); 
       break; 
      case 3: 
       baseControl = (BaseControl)LoadControl("~/DynamicControls/Control3.ascx"); 
       break; 
     } 

     UpdatePanelRight.ContentTemplateContainer.Controls.Add(baseControl); 
    } 
} 

根據節點選擇的深度將動態加載自定義控件。它可以工作,但是當用戶在樹視圖上選擇另一個節點時,原始標籤將重新加載到右列。

我該如何預防?

回答

0

動態控件必須在每次回發時重新創建,這篇文章Here 是關於如何保持動態控件及其狀態的好鏈接。

+0

嘿,你忘了的文章鏈接。 – VansFannel 2010-01-13 11:53:06