ASP.Net 3.5 AjaxControlToolkit CollapsiblePanelExpander в Master In UpdatePanel частичные проблемы обратной передачи

Долгое время читатель первый раз постер

У меня есть страница с контентом, связанная с главной страницей. Мастер имеет инструментарий скриптменеджера. На странице содержимого у меня есть вложенный повторитель в шаблоне элемента родительского повторителя, у меня есть CollapsiblePanelExtender для дочернего элемента управления повторителем. При частичной обратной передаче, если не свернутый атрибут не установлен, все панели раскрываются. Если для атрибута collapsed установлено значение true, то все панели сворачиваются при частичной обратной передаче.

Привязка данных повторителя происходит в разделе page_init кода, и я проверяю состояние панелей, просматривая элементы в событии page_load. Кажется, ничего не работает, при отладке кода я вижу, что свойства установлены надлежащим образом, но при отображении в браузере все панели открыты. Событие редактирования, которое запускает частичную обратную передачу, предварительно формируется в modalpopup.

Я попытался переместить панели в собственную панель обновлений, удалить панель обновлений, разместить модальные окна за пределами панели обновлений безрезультатно. ViewState не поддерживается.

Код страницы:

<asp:Repeater ID="rptrConsultants" runat="server" OnItemCommand="rptrConsultants_ItemCommand" OnItemDataBound="rptrConsultants_ItemDataBound">
                            <HeaderTemplate>
                                <div class="pageTitle">
                                    Your Consultants (Click on the image beside the consultant to view their group memberships)
                                    <br />
                                    Official names are listed. Expanding the consultant will show the name assigned and the related groups.
                                </div>
                                <br />
                                <table>
                                    <tr>
                                        <td style="width: 60px; font-weight: bold; text-align: center;">
                                            Actions
                                        </td>
                                        <td style="font-weight: bold;">
                                            Consultant information
                                        </td>
                                    </tr>
                            </HeaderTemplate>
                            <FooterTemplate>
                                </table>
                                <asp:Label ID="lblNoConsultant" runat="server" Text="You have not created any consultants" Visible="false"></asp:Label>
                            </FooterTemplate>
                            <ItemTemplate>
                                <tr>
                                    <td style="width: 60px; text-align: center;">
                                        <asp:Image ID="imgConsultantExpander" runat="server" ToolTip="Click here to toggle consultant details" AlternateText="Toggle Consultant Details" />
                                        <asp:ImageButton ID="btnDeleteConsultant" AlternateText="Delete Consultant" runat="server" CausesValidation="false" CommandName="DeleteConsultant" CommandArgument='<%#DataBinder.Eval(Container.DataItem, "IndividualsID")%>' ImageUrl="~/Styles/Images/Icons/remove_consultant.png" ToolTip="Delete consultant" />
                                        <asp:ImageButton ID="btnAddConsultantToNewGroup" AlternateText="Add consultant to a new group" runat="server" CommandName="AddConsultantToGroup" CommandArgument='<%#DataBinder.Eval(Container.DataItem, "IndividualsID")%>' ImageUrl="~/Styles/Images/Icons/add_user_to_group.png" ToolTip="Add consultant to a new group" />
                                    </td>
                                    <td>
                                        <%#DataBinder.Eval(Container.DataItem, "Name")%>
                                        (<%#DataBinder.Eval(Container.DataItem, "UserID") %>)
                                        <asp:Label ID="lblGroupCount" runat="server" />
                                    </td>
                                </tr>
                                <tr>
                                    <td colspan="2">
                                        <asp:Panel ID="pnlConsultantExpander" runat="server">
                                            <asp:Repeater ID="rptrConsultantGroups" runat="server" DataSource='<%#Container.DataItem.Row.GetChildRows("ConsultantGroupRelation") %>' OnItemCommand="rptrConsultantGroups_ItemCommand">
                                                <HeaderTemplate>
                                                    <table style="margin-left: 50px;">
                                                        <tr>
                                                            <td style="width: 40px; text-align: center; font-weight: bold;">
                                                                Actions
                                                            </td>
                                                            <td style="font-weight: bold;">
                                                                Membership
                                                            </td>
                                                            <td style="font-weight: bold;">
                                                                Nick Name
                                                            </td>
                                                        </tr>
                                                </HeaderTemplate>
                                                <ItemTemplate>
                                                    <tr>
                                                        <td style="width: 40px;">
                                                            <asp:ImageButton ID="btnEditConsultant" AlternateText="Edit Consultant" runat="server" CommandName="EditConsultantInGroup" CommandArgument='<%#Container.DataItem("GroupID") & "|" & Container.DataItem("GroupMembershipID")%>' ImageUrl="~/Styles/Images/Icons/edit_consultant.png" />
                                                            <asp:ImageButton ID="btnDeleteConsultant" AlternateText="Remove from group" runat="server" CommandName="DeleteConsultantFromGroup" CommandArgument='<%#Container.DataItem("GroupID") & "|" & Container.DataItem("GroupMembershipID")%>' ImageUrl="~/Styles/Images/Icons/delete_fromgroup.png" ToolTip="Remove from group" />
                                                        </td>
                                                        <td class="textbold">
                                                            <%#Container.DataItem("GroupName")%>
                                                        </td>
                                                        <td class="textitalic">
                                                            <%#Container.DataItem("nickname")%>
                                                        </td>
                                                    </tr>
                                                </ItemTemplate>
                                                <FooterTemplate>
                                                    </table>
                                                </FooterTemplate>
                                            </asp:Repeater>
                                        </asp:Panel>
                                        <asp:CollapsiblePanelExtender ID="cpepnlConsultantExpander" runat="server" TargetControlID="pnlConsultantExpander" CollapseControlID="imgConsultantExpander" ExpandControlID="imgConsultantExpander" CollapsedImage="~/Styles/Images/Icons/user_info.png" ExpandedImage="~/Styles/Images/Icons/user_open.png" ImageControlID="imgConsultantExpander" EnableViewState="true" CollapsedSize="0" />
                                    </td>
                                </tr>
                            </ItemTemplate>
                        </asp:Repeater>

И затем метод кода, который происходит в page_load:

Private Sub setCollapsiblePanelsInRepeater(ByVal rptr As Repeater)
    For Each item As RepeaterItem In rptr.Items
        If ((item.ItemType = ListItemType.AlternatingItem) Or (item.ItemType = ListItemType.Item)) Then
            For Each ctl As Control In item.Controls
                If (TypeOf ctl Is AjaxControlToolkit.CollapsiblePanelExtender) Then
                    Dim cpe As AjaxControlToolkit.CollapsiblePanelExtender = DirectCast(ctl, AjaxControlToolkit.CollapsiblePanelExtender)
                    If (Not IsPostBack()) Then
                        cpe.Collapsed = True
                        cpe.ClientState = "true"
                    Else
                        Dim isCollapsed As Boolean
                        If (Request.Form(cpe.UniqueID & "_ClientState") IsNot Nothing) Then
                            isCollapsed = (Request.Form(cpe.UniqueID & "_ClientState").ToString() = "true")
                        Else
                            isCollapsed = True
                        End If
                        If (isCollapsed) Then
                            cpe.ClientState = "true"
                            cpe.Collapsed = True
                        Else
                            cpe.ClientState = "false"
                            cpe.Collapsed = False
                        End If
                    End If
                End If
            Next
        End If
    Next
End Sub

Обратите внимание, что начальное событие загрузки работает! Все панели сворачиваются при загрузке страницы

Также обратите внимание, что повторитель вложен в tabPanel

Заранее благодарю за ответ!

извините за длинное объяснение

РЕДАКТИРОВАТЬ:

Обновить:

Попытка Javascript Route - до сих пор безрезультатно

    pageLoad = function()
    {
            CheckStatusOfPanels();
    };

    function CheckStatusOfPanels()
    {
        var allBehaviors = Sys.Application.getComponents();
        for (var loopIndex = 0; loopIndex < allBehaviors.length; loopIndex++)
        {
            currentBehavior = allBehaviors[loopIndex];
            if (currentBehavior._name && currentBehavior.get_name() == 'CollapsiblePanelBehavior')
            {
                var myID = currentBehavior.get_id() + '_ClientState';
                var isCollapsed = document.getElementById(myID).value
                if (isCollapsed == 'true')
                {
                    currentBehavior.expandPanel();
                    currentBehavior._ClientState = isCollapsed;
                }
                else
                {
                    currentBehavior.collapsePanel();
                    currentBehavior._ClientState = isCollapsed;
                }
            }
        }
    }

** ОБНОВЛЕНИЕ № 2 **

Мой представитель моложе 100, поэтому мне нужно подождать 8 часов, чтобы ответить на мой вопрос:

Вот мое "исправление" после работы почти весь день над этим:

ОК, наконец, нашел решение. Здесь это идет:

Используя метод SetCollapsiblePanelsInRepeater, опубликованный в моем исходном сообщении, я добавил вызов этого метода в метод prerender updatePanel, и теперь панели теперь сохраняют свое состояние....

Protected Sub updtpnlMain_PreRender(ByVal sender As Object, ByVal e As EventArgs) Handles updtpnlMain.PreRender
    setCollapsiblePanelsInRepeater(rptrGroups)
    setCollapsiblePanelsInRepeater(rptrConsultants)

End Sub

Для Ясности для других, прибегая к помощи этой проблемы, метод, который устанавливает события панели:

Private Sub setCollapsiblePanelsInRepeater(ByVal rptr As Repeater)
    For Each item As RepeaterItem In rptr.Items
        If ((item.ItemType = ListItemType.AlternatingItem) Or (item.ItemType = ListItemType.Item)) Then
            For Each ctl As Control In item.Controls
                If (TypeOf ctl Is AjaxControlToolkit.CollapsiblePanelExtender) Then
                    Dim cpe As AjaxControlToolkit.CollapsiblePanelExtender = DirectCast(ctl, AjaxControlToolkit.CollapsiblePanelExtender)
                    If (Not IsPostBack()) Then
                        cpe.Collapsed = True
                        cpe.ClientState = "true"
                    Else
                        Dim isCollapsed As Boolean
                        If (Request.Form(cpe.UniqueID & "_ClientState") IsNot Nothing) Then
                            isCollapsed = (Request.Form(cpe.UniqueID & "_ClientState").ToString() = "true")
                        Else
                            isCollapsed = True
                        End If
                        If (isCollapsed) Then
                            cpe.ClientState = "true"
                            cpe.Collapsed = True
                        Else
                            cpe.ClientState = "false"
                            cpe.Collapsed = False
                        End If
                    End If
                End If
            Next
        End If
    Next
End Sub

2 ответа

Решение

ОК, наконец, нашел решение. Здесь это идет:

Используя метод SetCollapsiblePanelsInRepeater, опубликованный в моем исходном сообщении, я добавил вызов этого метода в метод prerender updatePanel, и теперь панели теперь сохраняют свое состояние....

Protected Sub updtpnlMain_PreRender(ByVal sender As Object, ByVal e As EventArgs) Handles updtpnlMain.PreRender
    setCollapsiblePanelsInRepeater(rptrGroups)
    setCollapsiblePanelsInRepeater(rptrConsultants)

End Sub

Для ясности для других При поиске этой проблемы в Google метод, который проверяет состояние панелей и сворачивает / разворачивает их:

Private Sub setCollapsiblePanelsInRepeater (ByVal rptr As Repeater) Для каждого элемента в качестве RepeaterItem в rptr.Items If ((item.ItemType = ListItemType.AlternatingItem) Или (item.ItemType = ListItemType.Item)) Тогда для каждого элемента управления элемента управления If (TypeOf ctl является AjaxControlToolkit.CollapsiblePanelExtender) Затем Dim cpe As AjaxControlToolkit.CollapsiblePanelExtender = DirectCast(ctl, AjaxControlToolkit.CollapsiblePanelExlap If (Request.Form(cpe.UniqueID & "_ClientState") IsNot Nothing) Тогда isCollapsed = (Request.Form(cpe.UniqueID & "_ClientState").ToString() = "true") Else isCollapsed = True End If If (isCollapsed) Тогда cpe.ClientState = "true" cpe.Collapsed = True Остальное cpe.ClientState = "false" cpe.Collapsed = False End If End If End End Если Next End If Next End Sub

Менеджер инструментария на главных страницах вызывает реальные проблемы. Вы можете найти свое решение как использование на отдельных страницах контента.

Также вы уверены, что вы включили ViewState на страницах контента, как это

<%@ Page EnableViewState="true" Language="C#" AutoEventWireup="true" CodeFile="myfile.aspx.cs"
    Inherits="myfile" %>

Это для C#

Другие вопросы по тегам