通过在网格视图中使用image按钮在代码隐藏中调用函数

本文关键字:代码 按钮 调用 函数 image 隐藏 网格 视图 | 更新日期: 2023-09-27 18:20:44

可能重复:
在网格视图中使用image按钮调用代码背后的函数

我在.aspx中的gridview中有一个ImageButton。单击此图像按钮时,我必须调用一个函数。这就是我尝试的方式,但函数没有被调用。代码内部.aspx页面:

<GridView ......>
    <asp:HyperLink ID="HyperLink2" runat="server"  NavigateUrl='<%# DataBinder.Eval(Container.DataItem,"VehID","mngVeh.aspx?delid={0}") %>'>   
                                                         <asp:ImageButton runat="server" ID="DeleteUrlImageButton" ImageUrl="~/images/delete.jpeg" width='24' height='24'
                                                                          OnClick="DeleteUrlImageButton_Click"
                                                                          OnClientClick="return confirm('Are you sure you want to delete?');" />

   </asp:HyperLink>
</GridView>

.aspx.cs页面中的代码:

public void DeleteUrlImageButton_Click(object sender, EventArgs e)
{
    //code to perform the necessary action.
}

通过在网格视图中使用image按钮在代码隐藏中调用函数

我认为您在这里混合了控件。

我会在asp:超链接本身上使用ImageUrl,也会使用OnClick属性。您可以通过在NavigateUrl属性中使用javascript来处理OnClientClick。

我看不出有什么理由使用嵌套的ImageButton——我甚至怀疑它是否有效。

或者,只需完全删除asp:超链接,然后在OnClick事件中进行重定向。

这里的问题有两个:首先,点击事件不会在GridView中冒泡,这就是为什么事件没有启动的原因。其次,对于GridView的每一行都将有一个ImageButton,并且您需要确定事件源自哪一行(或者更准确地说,该行对应于哪个底层数据源记录)。

解决此问题的常见方法是使用ImageButton.CommandNameImageButton.CommandArgument属性,并处理GridView.RowCommand事件。

标记:

<asp:GridView ID="GridView1" runat="server" OnRowCommand="GridView1_RowCommand">
            <Columns>
                <asp:TemplateField>
                    <ItemTemplate>
                        <asp:ImageButton runat="server" ID="DeleteUrlImageButton" ImageUrl="~/images/delete.jpeg"
                            Width='24' Height='24' OnClientClick="return confirm('Are you sure you want to delete?');"
                            CommandName="MyDelete" CommandArgument='<%# Eval("RecordId") %>' />
                    </ItemTemplate>
                </asp:TemplateField>
            </Columns>
        </asp:GridView>

代码:

protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
{
    if ((e.CommandName == "MyDelete") && (e.CommandArgument != null))
    {
        //Add delete code here using e.CommandArgument to identify the correct record.
        //  For instance:
        MyDataObject obj = new MyDataObject();
        obj.RecordId = int.Parse(e.CommandArgument.ToString());
        MyDataObject.Delete(obj);
    }
}

编辑:我看到你在你的例子中提供了ID字段的名称,所以你可能想把我的例子中的"RecordId"替换为"VehID"。