通过在网格视图中使用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.
}
我认为您在这里混合了控件。
我会在asp:超链接本身上使用ImageUrl,也会使用OnClick属性。您可以通过在NavigateUrl属性中使用javascript来处理OnClientClick。
我看不出有什么理由使用嵌套的ImageButton——我甚至怀疑它是否有效。
或者,只需完全删除asp:超链接,然后在OnClick事件中进行重定向。
这里的问题有两个:首先,点击事件不会在GridView
中冒泡,这就是为什么事件没有启动的原因。其次,对于GridView
的每一行都将有一个ImageButton
,并且您需要确定事件源自哪一行(或者更准确地说,该行对应于哪个底层数据源记录)。
解决此问题的常见方法是使用ImageButton.CommandName
和ImageButton.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"。