Получить значение метки при нажатии кнопки во вложенном репитере 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)
Другие вопросы по тегам