可能重复:
Calling a functon in code behind by using an imagebutton in a gridview
我在.aspx的gridview中有一个ImageButton点击这个图像按钮我必须调用一个函数。 这是我尝试的方式,并没有调用该功能。 代码inside.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.
}
答案 0 :(得分:0)
我认为你在这里混合控制。
我会在asp:超链接本身以及OnClick属性上使用ImageUrl。您可以使用NavigateUrl属性中的javascript来处理OnClientClick。
我没有看到嵌套ImageButton的原因 - 我怀疑这甚至有用。
或者,只需完全删除asp:超链接,然后在OnClick事件中重定向。
答案 1 :(得分:0)
这里的问题有两个:首先,点击事件不会在GridView
中冒出来,这就是事件未被触发的原因。其次,ImageButton
的每一行都会有一个GridView
,您需要确定事件源自哪一行(或更准确地说,该行所对应的哪个基础数据源记录)。
解决此问题的常用方法是使用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”。