我正在开发一个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中按钮的面板显示正常。
编辑:我是个白痴,并且遗漏了所有这一切都发生在更新面板上。
答案 0 :(得分:1)
Button
s,ImageButton
和LinkButton
当它们处于您描述的控件模板中时,不会触发Click
个事件。 (编辑:除非与控件的OnClick
属性一起使用)相反,包含控件会触发事件,如果GridView
它是RowCommand
事件。使用按钮的CommandName
和CommandArgument
属性确定要在事件处理程序中执行的正确操作,如下所示:
标记:
<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检查它并执行您想要执行的操作