Регистрация обработчика событий VB.Net для вложенной кнопки ссылки

StackOverflow https://stackoverflow.com/questions/1787304

Вопрос

У меня есть кнопка ссылки, вложенная в сетку данных, вложенную в список данных (да, очень странно, но, к сожалению, это часть сайта, которую я не могу изменить).По сути, я хочу, чтобы кнопка ссылки запускала обработчик событий, который вызывает Response.Redirect(e.CommandArgument)).Другими словами, у меня уже есть URL-адрес, на который я хочу перенаправить, но я не могу понять, как вызвать событие, когда я нажимаю кнопку ссылки.

Я пробовал использовать события OnClick кнопки ссылки и события ItemCommand для сетки данных, но не думаю, что регистрирую их правильно.

Вот HTML для элементов управления.

<asp:DataList ID="dlstC" BorderWidth="0px" BorderStyle="None" CellPadding="2" CellSpacing="0"
runat="server">
<ItemTemplate>
    <table cellpadding="0" cellspacing="0">
        <tr style="padding-bottom: 4px">
            <td style="height: 20px">
                <asp:Label runat="server" ID="lblCertNum" Text='<%# "20" + (CStr(Container.DataItem("QuoteID").ToString) + "-" + CStr(Container.DataItem("QuoteRef").ToString)) %>'
                    Font-Bold="True" Font-Size="8pt"></asp:Label></td>
        </tr>
        <tr>
            <td>
                <asp:DataGrid ID="dgd_Certs" runat="server" ShowHeader="False" AutoGenerateColumns="False"
                    DataSource='<%# GetCert(CInt(Container.DataItem("QuoteRef"))) %>' BorderStyle="None"
                    BorderWidth="0" BorderColor="#ffffff" CellPadding="4" CellSpacing="0" OnItemCommand="DataGrid_EditItem">
                    <Columns>
                        <asp:TemplateColumn>
                            <ItemTemplate>
                                <asp:LinkButton ID="hlnCert" runat="server" Text='<%# Container.DataItem("CertName").ToString  %>' CommandName="RedirectToCert"
                                    CommandArgument='<%# BuildURLToCert(CInt(Container.DataItem("QuoteRef"))) %>' ToolTip="Click to view/edit certificate" ></asp:LinkButton>
                            </ItemTemplate>
                        </asp:TemplateColumn>
                        <asp:TemplateColumn>
                            <ItemTemplate>
                                <asp:Label ID="lblDate" runat="server" Text='<%# "Created - " + CStr(Container.DataItem("DateCreated").ToString)%>'></asp:Label>
                            </ItemTemplate>
                        </asp:TemplateColumn>
                    </Columns>
                </asp:DataGrid>
            </td>
        </tr>
    </table>
</ItemTemplate>

И в коде у меня есть

    Public Sub DataGrid_EditItem(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.DataGridCommandEventArgs)

    If e.CommandName = "RedirectToCert" Then

        Response.Redirect(e.CommandArgument.ToString)

    End If

End Sub

Это моя последняя попытка, когда я пытаюсь заставить сетку данных ItemCommand запускаться, когда клиент нажимает на ссылку, но в данный момент она не работает.

В противном случае есть ли более простой способ перенаправить клиента на правильную страницу, когда он нажимает кнопку ссылки?Я попробовал использовать OnPostBackURL, но проблема в том, что есть объекты, которые необходимо перенести, которых нет, когда я это делаю или когда я просто использую гиперссылку с установленным навигационным URL.

Заранее спасибо за любую помощь, это поставило меня в тупик уже 2 дня подряд.

Это было полезно?

Решение

Мне так и не удалось заставить обработчик событий срабатывать с кнопки ссылки, но я нашел обходной путь для исходной проблемы, когда переменные передавались с одной страницы на другую.Я использовал гиперссылку вместо кнопки ссылки и использовал строки запроса для передачи ссылочных номеров объектов, к которым мне нужен доступ на новой странице.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top