Почему бы не переключиться на использование asp: Repeater control.Оттуда вы можете добавить asp: LinkButton в шаблон повторителя и перехватить запись обратно.Элемент управления Repeater был разработан для того же действия, что и ваш цикл, а именно для создания шаблона, который будет использоваться для сбора данных.Это позволит использовать элементы управления с runat = "server" для обработки событий обратной передачи.
Вот некоторые страницы, на которых обсуждается использование повторителя:
http://www.aspnettutorials.com/tutorials/controls/repeater-vb.aspx
http://www.dotnetcurry.com/ShowArticle.aspx?ID=663
Вы, вероятно, захотите использовать событие OnItemDataBound для обработки ваших элементов управления, которые являются runat = "server":
выборка значений из элемента управления-повторителя в событии ItemDataBound
http://www.codeguru.com/csharp/.net/net_asp/tutorials/article.php/c12065
И статьи о том, как обрабатывать событие обратной передачи при нажатии кнопки:
событие кнопки во вложенном повторителе
ASP.Net: почему события нажатия / команды моей кнопки не связываются / не запускаются в повторителе?
Мой VB.NET ржавый, но я был бы более чем рад помочь вамс любыми вопросами, которые могут у вас возникнуть.
РЕДАКТИРОВАТЬ - Добавление образца кода
Мой ретранслятор:
<asp:Repeater runat="server" ID="repTemplate">
<ItemTemplate>
<div>
<%# DataBinder.Eval(Container.DataItem, "Key")%> - <%# DataBinder.Eval(Container.DataItem, "Value") %>
<asp:LinkButton OnClick="RepeaterLinkButton1_Click" runat="server" ID="linkDelete" Text="X" CommandArgument='<%# DataBinder.Eval(Container.DataItem, "Key") %>' />
</div>
</ItemTemplate>
</asp:Repeater>
И код сзади на странице
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
If IsPostBack = False Then
Dim data As Dictionary(Of Integer, String) = New Dictionary(Of Integer, String)()
data.Add(1, "Test #1")
data.Add(2, "Test #2")
data.Add(3, "Test #3")
data.Add(4, "Test #4")
data.Add(5, "Test #5")
Me.repTemplate.DataSource = data
Me.repTemplate.DataBind()
End If
End Sub
Protected Sub RepeaterLinkButton1_Click(sender As Object, e As EventArgs)
Dim linkButton As LinkButton = sender
Dim id As String = linkButton.CommandArgument
'TODO: Delete from the database based on ID
'TODO: Reload the data to the repeater
End Sub
Установив функцию OnClick в представлении кода HTML и установив для CommandArgument значениеID вы можете захватить ID строки и делать то, что вы хотите.Имейте в виду, что мой пример использует Dictonary для данных в качестве примера, поэтому «Ключ» - это уникальный ключ элемента, а «Значение» - это то, что в нем хранится, и поэтому HTML использует «Ключ» /«Ценность» имен.