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

时间:2011-06-23 20:36:39

标签: c# asp.net gridview imagebutton

我正在开发一个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外部的按钮,则在重新加载时,gridview中按钮的面板显示正常。

编辑:我是个白痴,并且遗漏了所有这一切都发生在更新面板上。

5 个答案:

答案 0 :(得分:1)

Button s,ImageButtonLinkButton当它们处于您描述的控件模板中时,不会触发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

答案 1 :(得分:0)

容器内的按钮/图像按钮(例如gridview(listview,repeater等))将其click事件冒泡到容器本身。要使面板可见,您需要在按钮上使用命令名称和命令参数属性,然后使用gridview的OnRowCommand事件来显示面板

HTH

答案 2 :(得分:0)

我假设你的事件没有被触发 - 你应该在图像按钮上使用commandname属性 - 并在gridview的onrow命令中选择它 - 或者在onrowcreated事件中注册你的imagebutton click事件。

答案 3 :(得分:0)

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

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

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

});

希望这有帮助。

答案 4 :(得分:0)

您可以为gridview使用Oncommand Event而不是在onicular控件上使用Onclick只需要从控件传递commandname并通过e.commandname检查它并执行您想要执行的操作