Bah, credevo di aver fatto qualche progresso ma invece qua non funziona niente.
Provo a postare un po di codice.
Quello che ho fatto è stato:
1. creare, per ogni pane, un bottone nascosto (pane0,pane1,pane2)
2. associare ad ogni bottone un handler ed un trigger
3. Forzare via javascript, al click sui link nell'header dei panes, il click sul bottone relativo al pane stesso (sembra un po contorto ma non mi pare ci fosse un altro modo di chiamara via ajax il server all'apertura del pane).
codice:
<asp:Content ID="Content1" ContentPlaceHolderID="PageBody" runat="server">
<asp:ScriptManager ID="ScriptManager1" runat="server"></asp:ScriptManager>
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
<div style="display:none">
<asp:Button OnClick="pane_Click" runat="server" ID="pane0" />
<asp:Button OnClick="pane_Click" runat="server" ID="pane1" />
<asp:Button OnClick="pane_Click" runat="server" ID="pane2" />
</div>
<asp:Panel ID="BasePanel" runat="server">
<div style="">
<ajaxToolkit:Accordion ID="MyAccordion"
runat="server"
HeaderCssClass="accordionHeader"
HeaderSelectedCssClass="accordionHeaderSelected"
ContentCssClass="accordionContent"
FadeTransitions="True"
FramesPerSecond="40"
TransitionDuration="250"
AutoSize="None"
RequireOpenedPane="true"
SuppressHeaderPostbacks="True"
Font-Names="Verdana"
Font-Size="12px"
ForeColor="#666666"
Width="90%"
SelectedIndex="0">
<Panes>
<ajaxToolkit:AccordionPane ID="AccordionPane0"
runat="server"
Font-Bold="true"
Font-Names="Verdana"
Font-Size="12px"
ForeColor="#666666"
TabIndex="0">
<Header>
<a onclick="document.getElementById('ctl00_PageBody_pane0').click();">
pane0
</a>
</Header>
<Content>...</Content>
</ajaxToolkit:AccordionPane>
<ajaxToolkit:AccordionPane ID="AccordionPane1"
runat="server"
Font-Bold="true"
Font-Names="Verdana"
Font-Size="12px"
ForeColor="#666666"
TabIndex="1">
<Header>
<a onclick="document.getElementById('ctl00_PageBody_pane0').click();"> pane0 </a>
</Header>
<Content>...</Content>
</ajaxToolkit:AccordionPane>
</asp:Panel>
</ContentTemplate>
<Triggers>
<asp:AsyncPostBackTrigger ControlID="pane0" EventName="Click" />
<asp:AsyncPostBackTrigger ControlID="pane1" EventName="Click" />
<asp:AsyncPostBackTrigger ControlID="pane2" EventName="Click" />
</Triggers>
Lato server ho scritto questo handler:
codice:
protected void pane_Click(object sender, EventArgs e)
{
Button b = (Button)sender;
int panel;
try
{
panel = int.Parse(b.ID.Substring(4, 1));
}
catch (System.FormatException)
{
panel = -1;
}
if (panel < 0) return;
switch (panel)
{
case 0:
case 1:
case 2:
default:
break;
}
}
Questo viene correttamente invocato, mi sembra di poter dire con una chiamata asincrona,
ma al termine della chiamata ajax il panel che ho cliccato non si apre. Rimane sempre aperto quello di default.