Asp.net 未设置VB.NET AddHandler引发对象引用

Asp.net 未设置VB.NET AddHandler引发对象引用,asp.net,vb.net,webforms,repeater,Asp.net,Vb.net,Webforms,Repeater,我有一个ASP.NET页面,在VB.NET中有代码隐藏。在ASPX页面上,我有一个转发器,转发器内有一个asp:ImageButton,我想捕捉按钮上的点击。据我所知,我必须使用FindControl,然后处理原始控件的副本: Codebehind: Dim imagebutton1 As ImageButton = repeater.FindControl("btnImage1") AddHandler imagebutton1.Command, AddressOf ReportTra

我有一个ASP.NET页面,在VB.NET中有代码隐藏。在ASPX页面上,我有一个转发器,转发器内有一个asp:ImageButton,我想捕捉按钮上的点击。据我所知,我必须使用FindControl,然后处理原始控件的副本:

Codebehind:    
Dim imagebutton1 As ImageButton = repeater.FindControl("btnImage1")
AddHandler imagebutton1.Command, AddressOf ReportTransfer
...
...
Protected Sub ReportTransfer(ByVal sender As ImageButton, ByVal args As CommandEventArgs)
...
End Sub
ASPX页面:

                <td>
                    <asp:ImageButton runat="server" ID="btnImage1" ImageUrl="~/images/icons/icon_small.png"
                                     CommandArgument="3" />
                </td>
            </tr>
        </ItemTemplate>

它在AddHandler行抛出“对象引用未设置为对象的实例”,我不知道它为什么这样做(我对VB.NET有点陌生)

提前感谢您

您得到的是“对象引用未设置为对象实例”,因为imagebutton1为空。在添加处理程序之前,确保确实找到了控件


AMissico是对的,您希望实际订阅中继器的
ItemCommand
事件,并使用
CommandArgument
标识用户单击的行。

您应该处理中继器的ItemCommand事件。在此事件中,CommandSource是图像按钮。CommandArgument或CommandName需要指示实际要执行的命令。将CommandArgument设置为3,意味着每个图像按钮将具有相同的值

repeater.FindControl(“btnImage1”)无法工作,因为每个按钮的id都将发生更改

添加处理程序不正确


Repeater.ItemCommand事件;在中继器控件中单击任何按钮时发生

你说得对……我更新了它,并把它归功于你。我脑子里一片空白,甚至没有考虑到问题的背景。O) 在我上一个网络项目之后,我变得非常擅长重复。我不得不对多个中继器进行嵌套和分组。这很有趣,因为我已经在中继器中使用了一百万次按钮。然而,我太专注于AddHandler了,我甚至没有想到他到底在做什么。