Запретить выгружать элементы управления загружаются динамически - PullRequest
0 голосов
/ 13 января 2010

Я занимаюсь разработкой веб-приложения ASP.NET с 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);
    }
}

В зависимости от выбранной глубины узла будет загружаться пользовательский элемент управления динамически. Это работает, но когда пользователь выбирает другой узел в древовидной структуре, оригинальная метка перезагружается в правом столбце.

Как я могу предотвратить это?

Ответы [ 2 ]

0 голосов
/ 14 января 2010

Я нашел эту статью, и она работает для меня:

http://msdn.microsoft.com/en-us/magazine/cc748662.aspx#id0070065

0 голосов
/ 13 января 2010

Динамические элементы управления должны быть заново созданы при каждой обратной передаче, эта статья Здесь хорошая ссылка о том, как сохранить динамические элементы управления и их состояние.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...