Pergunta

Eu tenho um linkbutton aninhado em um datagrid que está aninhado em um datalist (sim, muito estranho, mas infelizmente faz parte do site que não posso alterar).Essencialmente, quero que o linkbutton dispare um manipulador de eventos que chame Response.Redirect (e.CommandArgument)).Em outras palavras, já tenho o URL para o qual desejo redirecionar, mas não consigo descobrir como fazer com que o evento seja acionado quando clico no botão do link.

Tentei usar os eventos OnClick do linkbutton e os eventos ItemCommand para o datagrid, mas acho que não estou registrando-os corretamente.

Aqui está o HTML para os controles.

<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>

E no código por trás eu tenho

    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

Esta é minha última tentativa em que estou tentando fazer com que o ItemCommand do datagrids seja acionado quando o cliente clica no link, mas não está funcionando no momento.

Caso contrário, existe uma maneira mais fácil de redirecionar o cliente para a página correta quando ele clica no botão do link?Tentei usar o OnPostBackURL, mas o problema é que há objetos que precisam ser transportados e que não parecem ser quando faço isso ou quando apenas uso um hiperlink com o navegador definido.

Agradecemos antecipadamente por qualquer ajuda, isso me deixou perplexo por 2 dias seguidos.

Foi útil?

Solução

Nunca consegui fazer com que o manipulador de eventos fosse acionado a partir do linkbutton, mas encontrei uma solução alternativa para o problema original, fazendo com que variáveis ​​fossem passadas de uma página para outra.Usei um hiperlink em vez de um botão de link e usei as strings de consulta para passar números de referência para os objetos que preciso acessar na nova página.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top