2015-10-28 2 views
0

У меня есть Repeater структурированного что-то вроде этого:Найти Sibling контроля в Repeater

<asp:Repeater ID="rptListClaimTypes" runat="server"> 
    <ItemTemplate> 
     <asp:FileUpload ID="fuContract" runat="server" /> 
     <asp:LinkButton ID="btnUpload" runat="server" Text="Upload" OnClick="btnUpload_Click" CommandName='<%# Eval("ClaimTypeID")%>' /> 
    </ItemTemplate> 
</asp:Repeater> 

Мне нужно обрабатывать загрузку файлов при btnUpload нажатия. Я могу получить доступ к элементу управления, который вызвал подпрограмму с помощью sender. Как мне получить доступ к fuContract?

Protected Sub btnUpload_Click(sender As Object, e As EventArgs) 

    Dim ClaimTypeID As Integer = sender.CommandName 
    Dim fuContract As FileUpload = '?? 

End Sub 

ответ

1

Используя текущий метод обработки событий вы бы бросили отправителя как LinkButton, отлитый родителя как RepeaterItem, а затем использовать FindControl найти Control FileUpload:

Dim fuContract As FileUpload = CType(CType(sender, LinkButton).Parent.FindControl("fuContract"), FileUpload) 

Я предпочитаю обращение эти типы событий с использованием события ItemCommand Repeater:

Private Sub rptListClaimTypes_ItemCommand(source As Object, e As RepeaterCommandEventArgs) Handles rptListClaimTypes.ItemCommand 

    Dim fuContract As FileUpload = CType(e.Item.FindControl("fuContract"), FileUpload) 

End Sub 
+0

Это замечательно. Я только что обработал это с помощью немного длинного намоточного пути 'Dim btnUpload As LinkButton = DirectCast (отправитель, LinkButton)' 'Dim rpItem As RepeaterItem = TryCast (btnUpload.NamingContainer, RepeaterItem)' 'Dim fuContract As FileUpload = rpItem.FindControl («fuContract») ', но ваш однострочный шрифт намного лучше. Большое спасибо. – Turnip