首页 > 解决方案 > 当 Accordion SelectedIndexChanged 时从动态创建的 Accordion 面板获取 Pane.ID

问题描述

我已经在这几天没有成功。我有一个动态创建的手风琴面板。手风琴面板中的一项是窗格。该窗格给出了数据库中正在填充折叠式窗格中的记录的 ID。例如,如果我为 50 个州中的每一个州创建一个手风琴,paneID 将代表州的准入顺序(即特拉华州,Pane.ID = "Pane_1",新泽西州,Pane.ID = "Pane_3",夏威夷, Pane.ID = "Pane_50" 等)

当用户选择 Accordion 时,我需要能够提取窗格的 ID。我已将以下脚本添加到绑定手风琴的 selectedIndexChange 事件的页面中:

        function pageLoad() {

        $find('<%= Accordion1.ClientID %>_AccordionExtender').add_selectedIndexChanged(
    accordion_selectedIndexChanged);
    };

    function accordion_selectedIndexChanged(sender, args) {
        var sinx = sender.get_SelectedIndex();
        alert(sinx);
    }

这是因为当我选择 Accordion 窗格时它会触发。从现在开始,我不知道如何在手风琴_selectedIndexChanged 函数中获取 Pane.ID。

标签: javascriptasp.netajaxcontroltoolkit

解决方案


首先我要感谢@zgood。虽然我没有在方法中找到我想要的东西,但这是我没有找到的。我发现我看不到窗格 ID,但我可以看到标题 ID。使用以下链接中的信息,我能够开发一个解决方案:
Pass Javascript Variables value to C#
Accordion Selected Index Change Content
How to Catch Accordion Pane Select Event

以下是一般步骤:

  • 创建了一个隐藏字段
  • 创建了一个隐藏按钮
  • 捕捉手风琴变化
  • 将选定的索引传递到隐藏字段中,然后调用隐藏按钮单击事件
  • 在后面的代码中查找了 headercontainer ID。

这是aspx代码:

function pageLoad() {
    $find('<%= Accordion1.ClientID %>_AccordionExtender').add_selectedIndexChanged(accordion_selectedIndexChanged);
};

function accordion_selectedIndexChanged(sender, args) {
    var control_clientId;
    var sinx = sender.get_SelectedIndex();
    if (sinx > -1) {
        var hdnfldVariable = document.getElementById('<%=hdnfldVariable.ClientID %>');
        hdnfldVariable.value = sinx;
        document.getElementById('LogEntry').click();                
    }
}

<asp:HiddenField ID="hdnfldVariable" runat="server" />
<asp:Button ID="LogEntry" runat="server" ClientIDMode="Static" OnClick="LogEntry_Click" />

这是背后的代码:

 protected void LogEntry_Click(object sender, EventArgs e)
{
   if (hdnfldVariable.Value != "")
   {
      int i = int.Parse(hdnfldVariable.Value);
      string id = Accordion1.Panes[i].HeaderContainer.ID;
      //Do Something here
   }
}

推荐阅读