получить значение метки при нажатии кнопки во вложенном повторителе asp.net vb - PullRequest
0 голосов
/ 14 октября 2011

У меня есть вложенные повторители, у каждого элемента во вложенном повторителе есть метка и кнопка, я хочу иметь возможность доступа к 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 ]

0 голосов
/ 14 октября 2011

Вот хорошая статья 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)
0 голосов
/ 14 октября 2011

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

...