0

長年の読者初めてのポスター

マスターページにリンクされたコンテンツページがあります。マスターにはtoolkitscriptmanagerがあります。コンテンツページでは、親リピーターのアイテムテンプレート内にネストされたリピーターがあり、子リピーターコントロール用のCollapsiblePanelExtenderがあります。部分的なポストバック時に、collapsed属性が設定されていない場合、すべてのパネルが展開されます。折りたたまれた属性がtrueに設定されている場合、すべてのパネルは部分的なポストバック時に折りたたまれます。

リピーターのデータバインディングは、コードビハインドのpage_initセクションで発生しており、page_loadイベントの項目を反復処理して、パネルの状態を確認しています。コードのデバッグ中に何も機能していないようですが、プロパティが適切に設定されていることはわかりますが、ブラウザーでレンダリングすると、すべてのパネルが開いています。部分的なポストバックをトリガーする編集イベントは、モーダルポップアップで実行されます。

パネルを独自の更新パネルに移動し、更新パネルを削除し、更新パネルの外側にモーダルを配置しようとしましたが、役に立ちませんでした。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ルートを試みました-それでも役に立ちません

    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時間待つ必要があります。

これは、ほぼ一日中これに取り組んだ後の私の「修正」です。

OK、ついに解決策を見つけました。ここに行きます:

元の投稿に投稿されたSetCollapsiblePanelsInRepeaterメソッドを使用して、updatePanel prerenderメソッドにこのメソッドの呼び出しを追加すると、パネルの状態が保持されるようになりました。

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
4

2 に答える 2

1

マスター ページの Toolkitscript マネージャーは実際の問題を引き起こします。個々のコンテンツ ページで使用すると、ソリューションが見つかる場合があります。

また、このようなコンテンツ ページでビューステートを有効にしたことを確認していますか?

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

これはC#用です

于 2011-08-09T03:18:37.530 に答える
0

OK、ついに解決策を見つけました。ここに行きます:

元の投稿に投稿されたSetCollapsiblePanelsInRepeaterメソッドを使用して、updatePanel prerenderメソッドにこのメソッドの呼び出しを追加すると、パネルの状態が保持されるようになりました。

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 D 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)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)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折りたたみ=FalseEnd If End If End If Next End If Next End Sub折りたたみ=FalseEnd If End If End If Next End If Next End Sub

于 2011-08-09T18:37:57.787 に答える