0
<ajaxToolkit:Accordion ID="Accordion1" CssClass="accordion" SelectedIndex="0" HeaderCssClass="accordionHeader" HeaderSelectedCssClass="accordionHeaderSelected" AutoSize="None" RequireOpenedPane="false" ContentCssClass="accordionContent" runat="server"> 
<Panes>   
<ajaxToolkit:AccordionPane ID="Pane1" runat="server">
    <Header><b>Panel 1</b></Header>
      <Content>
        <asp:UpdatePanel ID="UpdatePanel1" runat="server">
        <ContentTemplate>          
            <br>
            Age: <asp:textbox id="Age1" runat="server" Width="35" Font-Bold="True"/><br>
            Attorney: <asp:CheckBox ID="Attorney" runat="server" /><br>
            <asp:button ID="Button1" text="Submit" OnClick="Button1_Click"
            runat="server"/><br>
            <asp:label id="Message1" runat="server" ForeColor="White" Font-Size="Small" Font-Bold="True"/>                
        </ContentTemplate>
        </asp:UpdatePanel>
        </Content>
    </ajaxToolkit:AccordionPane>

    <ajaxToolkit:AccordionPane ID="Pane2" runat="server">
        <Header><b>Panel 2</b></Header>
        <Content>
            <asp:UpdatePanel ID="UpdatePanel2" runat="server">
            <ContentTemplate>                    
                <br>
                <asp:textbox id="Age2" runat="server" Width="35" Font-Bold="True"/><br>
                <asp:button ID="Button2" text="Submit" onclick="Button2_Click"
                runat="server"/><br><br>
                <asp:label id="Message2" runat="server" ForeColor="White" Font-Size="Small" Font-Bold="True" />
            </ContentTemplate>
            </asp:UpdatePanel>
        </Content>
    </ajaxToolkit:AccordionPane>
    </Panes>

protected void Button1_Click(object sender, EventArgs e) {
        if (Attorney.Checked) {
            Pane2.Visible = true;
        } else {
            Pane2.Visible = false;
        }
        //Message1.Text = Age1.Text;
    }

我有五个手风琴面板。仅当在第一个面板中检查复选框时,才应显示最后一个面板。在每个 Accordion 面板内我都有一个 UpdatePanel,在其中我有 ContentTemplate 与控件和提交按钮特定于该手风琴面板。我添加 UpdatePanel 的原因是,当我更新特定面板时,它不会影响其他手风琴面板。

问题是我需要根据是否在第一个面板中选中复选框并单击提交按钮来切换最后一个手风琴面板显示。在后面的代码中,在 btnSubmit1 事件中......我有代码说如果复选框被选中...... Pane2.Visible = true 否则 Pane2.Visible = false。由于某些原因,它仍然显示 LastPanel。

我不确定我哪里出错了......请指教!

谢谢!吉尼

4

2 回答 2

1

我通过添加一个外部更新面板解决了这个问题......并删除了面板 2 的更新面板。尚未彻底测试它,但到目前为止看起来不错。

<asp:Content ID="BodyContent" runat="server" ContentPlaceHolderID="MainContent">
<asp:UpdatePanel ID="OuterPanel" UpdateMode="Always" ChildrenAsTriggers="true" runat="server">
<ContentTemplate>
<ajaxToolkit:Accordion ID="Accordion1" CssClass="accordion" SelectedIndex="0" HeaderCssClass="accordionHeader" 
HeaderSelectedCssClass="accordionHeaderSelected" AutoSize="None" RequireOpenedPane="false" ContentCssClass="accordionContent" runat="server"> 
<Panes>   
    <ajaxToolkit:AccordionPane ID="Pane1" runat="server">
    <Header><b>Panel 1</b></Header>
      <Content>            
            <br>
            Age: <asp:textbox id="Age1" runat="server" Width="35" Font-Bold="True" /><br />
            Attorney: <asp:CheckBox ID="Attorney" runat="server" /><br>
            <asp:button ID="Button1" text="Submit" OnClick="Button1_Click"
            runat="server"/><br>
            <asp:label id="Message1" runat="server" ForeColor="White" Font-Size="Small" Font-Bold="True"/>                                                            
        </Content>
    </ajaxToolkit:AccordionPane>        
    <ajaxToolkit:AccordionPane ID="Pane2" runat="server">
        <Header><b>Panel 2</b></Header>
        <Content>                            
                <br>
                <asp:textbox id="Age2" runat="server" Width="35" Font-Bold="True"/>&nbsp;&nbsp;
                <asp:button ID="Button2" text="Submit" onclick="Button2_Click"
                runat="server"/><br><br>
                <asp:label id="Message2" runat="server" ForeColor="White" Font-Size="Small" Font-Bold="True" />                
        </Content>
    </ajaxToolkit:AccordionPane>
    </Panes>
 </ajaxToolkit:Accordion>
</ContentTemplate>

于 2013-06-26T20:37:42.610 回答
0

我想确定一下您的代码,但我希望这是因为您UpdatePanel在每个AccordionPanels. 一旦一个事件发生在一个事件中UpdatePanel,ASP.NET 将不会运行处理附加到另一个事件的代码UpdatePanel

首先,我会取出所有UpdatePanels 来查看您的代码是否按预期工作。然后,我会添加一个UpdatePanel包裹整个的Accordion,看看你的代码是否仍然有效。

如果您真的决定需要 5UpdatePanel秒,请查看<Triggers>. UpdatePanel您将能够提供CheckBox的 ID 以强制其他关联UpdatePanel到 PostBack。

于 2013-06-26T14:30:50.010 回答