Как получить список значений атрибутов данных из первой строки повторителя? - PullRequest
0 голосов
/ 16 апреля 2020

Как можно прочитать атрибуты данных элемента управления. NET?

Желаемый результат

  • 1
  • 2
  • 3

ASPX

<asp:Repeater ID="rpt" runat="server">
  <ItemTemplate>
    <asp:Panel ID="pnlItem" runat="server">
      <asp:Panel ID="pnlA" CssClass="pnl-class" data-id="1" runat="server"></asp:Panel>
      <asp:Panel ID="pnlB" CssClass="pnl-class" data-id="2" runat="server"></asp:Panel>
      <asp:Panel ID="pnlC" CssClass="pnl-class" data-id="3" runat="server"></asp:Panel>
    </asp:Panel>
  </ItemTemplate>
</asp:Repeater>

VB. NET

Private Sub rpt_ItemDataBound(sender As Object, e As RepeaterItemEventArgs) Handles rpt.ItemDataBound
  If e.Item.ItemType = ListItemType.Item OrElse e.Item.ItemType = ListItemType.AlternatingItem Then
    If e.Item.ItemIndex = 0 Then 'First item only
      For Each control As Control In e.Item.FindControl("pnlItem").Controls.OfType(Of Panel)
        'How do you read the attributes from the panel here?
      Next
    End If
  End If
End Sub

Я могу легко l oop на каждой панели в первом ряду, но не могу понять, как прочитать атрибут данных панели.

1 Ответ

1 голос
/ 16 апреля 2020

Помните, что любая переменная, которую вы создаете в обработчике, будет воссоздана при каждом обращении к ней, если только область действия переменной не превышает обработчик.

Я использовал ctrl As Panel, чтобы сделать его счастливым.

Private Sub rpt_ItemDataBound(sender As Object, e As RepeaterItemEventArgs) Handles rpt.ItemDataBound
    Static sb As New StringBuilder()

    If e.Item.ItemType = ListItemType.Item OrElse e.Item.ItemType = ListItemType.AlternatingItem Then
        If e.Item.ItemIndex = 0 Then 'First item only
            For Each ctrl As Panel In e.Item.FindControl("pnlItem").Controls.OfType(Of Panel)
                Dim d = ctrl.Attributes("data-id")
                sb.Append(d)
            Next
        End If
    End If

    ' Do something with sb N.B. it is called for every rpt.ItemDataBound event.
    ' "msg" is an asp:Literal I put on the page for testing.
    msg.Text = sb.ToString()

End Sub
...