2010-01-13 123 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