Получить значение метки при нажатии кнопки во вложенном репитере asp.net vb
У меня есть вложенные повторители, каждый элемент во вложенном повторителе имеет метку и кнопку на нем, я хочу иметь возможность доступа к label.text при нажатии кнопки, я думаю, что я почти на месте, так как я могу вернуть индекс повторитель и вложенный повторитель, по которому щелкают, у меня просто возникают проблемы с поиском самого ярлыка.
Вы могли бы помочь мне без того, чтобы я опубликовал код ретранслятора. Вот мой код для того, когда кнопка нажата.
Protected Sub btnEditUser_Click(ByVal sender As Object, ByVal e As System.EventArgs)
Dim btnEditUser As Button = DirectCast(sender, Button)
Dim reClient As RepeaterItem = DirectCast(btnEditUser.NamingContainer.Parent.Parent, RepeaterItem)
Dim reUser As RepeaterItem = DirectCast(btnEditUser.NamingContainer, RepeaterItem)
Dim selectedClient As Integer = reClient.ItemIndex
Dim selectedUser As Integer = reUser.ItemIndex
Dim UserId As Label = DirectCast(reClients.Items(selectedClient).FindControl("lUserName"), Label)
Response.Write(selectedClient & " " & selectedUser & " " & UserId.Text)
End Sub
В настоящее время я получаю эту ошибку "Ссылка на объект не установлена на экземпляр объекта". при попытке записать значение UserId.Text, так что я думаю, что я получил немного неправильно в этой строке:
Dim UserId As Label = DirectCast(reClients.Items(selectedClient).FindControl("lUserName"), Label)
2 ответа
Это всего лишь предположение, но иногда вы получаете такие ошибки, когда не все строки содержат искомый элемент управления. Часто код перебирает строки по порядку, сначала попадает в строку заголовка, которая не содержит соответствующего элемента управления, и завершается ошибкой.
Вот хорошая статья MSDN - Расположение элемента управления внутри иерархии именования контейнеров.
Private Function FindControlRecursive(
ByVal rootControl As Control, ByVal controlID As String) As Control
If rootControl.ID = controlID Then
Return rootControl
End If
For Each controlToSearch As Control In rootControl.Controls
Dim controlToReturn As Control =
FindControlRecursive(controlToSearch, controlID)
If controlToReturn IsNot Nothing Then
Return controlToReturn
End If
Next
Return Nothing
End Function
Попытайся,
Dim UserId As Label =DirectCast(FindControlRecursive(repClient,"lUserName"),Label)