VB.NET AddHandler抛出Object引用未设置

时间:2010-03-05 01:05:30

标签: asp.net vb.net webforms repeater

我在VB.NET中有一个带有代码隐藏的ASP.NET页面。在ASPX页面上,我在转发器中有一个带有asp:ImageButton的Repeater,我想抓住按钮上的点击。据我所知,我必须使用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有点新)

提前谢谢

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

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

repeater.FindControl(“btnImage1”)不起作用,因为每个按钮的id都会改变。

添加处理程序不正确。

Repeater.ItemCommand事件;在Repeater控件中单击任何按钮时发生; http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.repeater.itemcommand.aspx