0

アコーディオンを作成する ASPX リピーターがあります。ユーザーがページにアクセスすると、DB をチェックして、ユーザーに適用される部分を確認します。「hasAppied」フィールドに基づいてアコーディオンの 1 つまたは複数のセクションを事前に選択し、他のセクションを閉じたいと考えています。

 <div id="accordion">
  <asp:Repeater ID="rptAccordion" runat="server">
   <ItemTemplate>                             
    <div class="accordion"><h4><a href="#<%# DataBinder.Eval(Container.DataItem,"Name") %>"><%# (Boolean.Parse(Eval("HasApplied").ToString())) ? "<b>" : ""%><%# DataBinder.Eval(Container.DataItem,"Name") %></b></a></h4><div>
     <asp:Repeater ID="rptGoals" runat="server"  DataSource='<%# Eval("References") %>'>
      <ItemTemplate>
       <div style="display:block;"><asp:CheckBox ID="chkAction" runat="server" Enabled='true' Text='<%# DataBinder.Eval(Container.DataItem,"Description") %>' /></div>
      </ItemTemplate>
     </asp:Repeater>
    </div>
   </ItemTemplate>
  </asp:Repeater>
 </div>
<script type="text/javascript">
  $(".accordion").accordion({ collapsible: true, active: false, icons: { "header": "ui-icon-triangle-1-e", "activeHeader": "ui-icon-triangle-1-s"} });
</script>

` 序数としてアドレス指定してみました。名前フィールドで id を div (Class = アコーディオン) に適用してみました。また、名前をアンカー タグに追加し、クエリ文字列を介してアドレス指定しようとしました。何も機能していないようです。一歩足りないかも。

事前にご協力いただきありがとうございます。

4

1 に答える 1

0

私はそれを考え出した!アコーディオンのセクションに名前を付け、コード ビハインドから JQuery クリック イベントを作成して、リテラルを入力する必要がありました。これは、ソリューションの UI 側です。

<div id="accordion" name="accordion"> 
     <asp:Repeater ID="rptAccordion" runat="server" OnItemCreated="rptAccordion_ItemCreated" >
         <ItemTemplate>
             <div class="accordion"><a id="section<%# i-1 %>" href="#"> Accordion header stuff </a><div>
             <div> panel stuff </div>
         </ItemTemplate>
     </asp:Repeater>
</div>
<script type="text/javascript">
    $(".accordion").accordion({ collapsible: true, active: false, icons: { "header": "ui-icon-triangle-1-e", "activeHeader": "ui-icon-triangle-1-s"} });

    $(document).ready(function () {
        <asp:Literal ID="ltJsShowBlock" runat="server" />
    });    
</script>

次に、コード ビハインドで、アイテム作成イベントで i をインクリメントします。

public void rptAccordion_ItemCreated(object sender, RepeaterItemEventArgs e)
{
   i++;
}

次に、コックを作成し、文字列をリテラルに割り当てます。

private void preselectAccordion(List<sectiondata> sections)
    {
        var js = string.Empty;
        string format = @"$(""#section*"").click(); ";
        for (int i = 0; i < sections.Count; i++)
        {
            if (sections[i].meetsCondition == true)
            {
                js += format.Replace("*", i.ToString());
            }
        }

        ltJsShowBlock.Text = js;
    }
于 2013-06-04T13:18:32.523 に答える