我在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有点新)
提前谢谢
答案 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