GridView中ImageButton的OnClick与常规ImageButton的区别

本文关键字:ImageButton 常规 区别 OnClick GridView | 更新日期: 2023-09-27 18:00:19

我正在处理一个ASP.NET/C#项目,并且有一个GridView控件。其中一列是TemplateField/ItemTemplate,其中包含ImageButton。在OnClick事件期间,我使一个面板可见。使用常规ImageButton执行此操作时,页面将重新加载,并且面板可见。GridView中的ImageButton不会发生这种情况。有人知道我是怎么做到的吗?或者为什么会这样?

谢谢你抽出时间,如果你有任何问题,请告诉我。

以下是相关的asp定义

<asp:TemplateField ItemStyle-Width="90px"  ItemStyle-VerticalAlign ="Bottom" ItemStyle-HorizontalAlign ="Center" HeaderText="Add Alias">
                <HeaderStyle Font-Bold="True" Font-Size="11px" VerticalAlign="Bottom"/>
                    <ItemTemplate>
                        <asp:ImageButton ID ="btnAddAliasHeader" runat="server" ImageUrl="~/img/AddAlias.gif" onclick="btnAddAlias_Click" />
                 </ItemTemplate>
                </asp:TemplateField>

这是OnClick函数的C#。

protected void btnAddAlias_Click(object sender, EventArgs e)
{
    ImageButton btnAddAlias = (ImageButton)sender;
    GridViewRow row = (GridViewRow)btnAddAlias.Parent.Parent;
    int rowIndex = row.RowIndex;
    lblSelectedCity.Text = gvResults.Rows[rowIndex].Cells[0].Text;
    lblSelectedCountry.Text = ddlCountry.Text;
    pnlAddAlias.Visible = true;
}

我添加了OnRowCommand事件,并在那里显示了面板,但它仍然没有显示。我认为这可能与回发有关,因为如果我在重新加载时单击网格视图外部的按钮,那么网格视图内部按钮中的面板就会显示良好。

编辑:我是个白痴,忽略了所有这些都发生在更新面板中。

GridView中ImageButton的OnClick与常规ImageButton的区别

Button s、ImageButton s和LinkButton s在控件模板中时不会激发Click事件,如您所述。(编辑:除非与控件的OnClick属性一起使用)相反,包含控件会激发一个事件,如果是GridView,则为RowCommand事件。使用按钮的CommandNameCommandArgument属性来确定在事件处理程序中采取的正确操作,如下所示:

标记:

<asp:LinkButton ID="LinkButton1" runat="server" CommandName="DoStuff" CommandArgument='<%# Eval("RecordID") %>' Text="DoStuff"></asp:LinkButton>

代码:

Protected Sub GridView1_RowCommand(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewCommandEventArgs) Handles GridView1.RowCommand
    If e.CommandName = "DoStuff" Then
        'Do something with e.CommandArgument'
    End If
End Sub

容器(如gridview(listview、repeater等))中的按钮/imagebuttons的单击事件会冒泡到容器本身。要使面板可见,您需要使用按钮上的命令名称和命令参数属性,然后使用gridview的OnRowCommand事件来显示面板

HTH

我假设您的事件没有启动-您应该使用imagebutton上的commandname属性-并在gridview的onrowcommand上拾取它-或者在onrowcreated事件中注册您的imagebutton click事件。

如果不需要回发。如果我误解了这个问题,我很抱歉。您可以使用一个链接或包装在标签和jQuery中的常规图像,而不是使用图像按钮(服务器控件)。这将阻止回发到服务器。希望这能有所帮助。

<a href="#" id="viewPanel">Click to View Panel</a>

$("#<%=viewPanel.ClientID%>").click(function(e)
{
    e.preventDefault();
    $("#id_of_panel").show();
});

希望这能有所帮助。

您可以在gridview中使用OncommandEvent,而不是在相关控件上使用Onclick,只需从控件中传递commandname并通过e.commandname进行检查,然后执行您想要执行的