VB.NET AddHandler, выбрасывающий объект Ссылка не установлена - PullRequest
1 голос
/ 05 марта 2010

У меня есть страница 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)

Заранее спасибо

Ответы [ 2 ]

1 голос
/ 05 марта 2010

Вы должны обрабатывать событие ItemCommand Repeater.В этом случае CommandSource является кнопкой изображения.Либо CommandArgument, либо CommandName должны указывать, какую команду вы действительно хотите выполнить.Если для CommandArgument задано значение 3, это означает, что каждая кнопка изображения будет иметь одинаковое значение.

Repeater.FindControl ("btnImage1") не будет работать, поскольку идентификатор каждой кнопки будет изменяться.

Добавление обработчика неверно.

Repeater.ItemCommand Event;Происходит при нажатии любой кнопки в элементе управления Repeater;http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.repeater.itemcommand.aspx

1 голос
/ 05 марта 2010

Вы получаете «Ссылка на объект не установлена ​​на экземпляр объекта», потому что imagebutton1 имеет значение null. Перед добавлением обработчика убедитесь, что вы действительно находите элемент управления.

AMissico прав: вы хотите подписаться на событие репитера ItemCommand и использовать CommandArgument, чтобы определить, на какую строку нажал пользователь.

...