GridView RowCommand 事件未触发
Posted
技术标签:
【中文标题】GridView RowCommand 事件未触发【英文标题】:GridView RowCommand event not firing 【发布时间】:2012-01-19 15:38:51 【问题描述】:我有一个看起来像这样的 GridView:
<asp:GridView
ID="GridView1"
AllowPaging="true"
OnRowCommand="RowCommand"
OnPageIndexChanging="gridView_PageIndexChanging"
Runat="server">
<Columns>
...
<asp:TemplateField>
<ItemTemplate>
<asp:Button ID="Button1" ButtonType="Button" CommandName="ItemExport" CommandArgument='<%# Eval("EXPORT") %>'
Text="Export" runat="server" />
</ItemTemplate>
</asp:TemplateField>
...
</Columns>
</asp:GridView>
这里是RowCommand
:
protected void RowCommand(object sender, GridViewCommandEventArgs e)
if (e.CommandName == "ItemExport")
// etc.
单击按钮根本不会触发RowCommand
事件。但是,当我在 GridView 的分页器中单击页面索引时,RowCommand
会触发。
【问题讨论】:
何时将网格绑定到数据源,仅if(!Postback)
?!
是的,问题是绑定没有包含在if(!isPostBack)
语句中。
【参考方案1】:
您必须不将您的网格绑定到 Page_Load 中的回发上,只有当某些更改导致网格重新加载数据(例如排序、分页)并且仅在适当的事件处理程序中。
另一个可能的原因:您是否在某处禁用了 ViewState?
【讨论】:
不敢相信这困扰了我好几个小时...只是坐在这里茫然地盯着一些没有功能的 ASP.NET 代码...都是因为我设置了 EnableViewState="false" :@跨度> 当我在 if(!IsPostBack) 中绑定 GridView 时,寻呼机不起作用:( @MazdakShojaie 您必须为 GridView.PageIndexChanged 事件添加一个事件处理程序,并在该处理程序中重新绑定。查看这篇 MSDN 文章 msdn.microsoft.com/en-us/library/… 对我来说,是 grdiview 上的“EnableViewState”设置为 TRUE。将其设置为 FALSE 并开始工作。谢谢。【参考方案2】:在按钮标签中使用CausesValidation="false"
。它可以解决问题。
【讨论】:
【参考方案3】:我刚有个同事遇到了同样的问题;这是由onrowcommand=
属性未在asp:GridView
元素中设置引起的。这应该设置为将处理事件的处理程序的名称。
...以防万一有人遇到同样的问题!
【讨论】:
【参考方案4】:将grid.Databind()
放入if (!IsPostBack)
protected void Page_Load(object sender, EventArgs e)
if (!IsPostBack)
grid.DataBind();
【讨论】:
【参考方案5】:尝试了上述答案,但仍然无法得到回复。最终成为唯一 ID 问题。我有两个 <ItemTemplate>
带有相同 ID 的按钮。 (在不同的网格视图中。我的第二个是在用户控件中)
将 <asp:Button ID="" />
更改为唯一 ID 为我解决了回发问题。
只是想我会为其他尝试其他选项但没有运气的人发帖。
【讨论】:
【参考方案6】:如果你的代码是这样的:
protected void Page_Load(object sender, EventArgs e)
BindGrid(dgv);
if (!IsPostBack)
将BindGrid()
放在!isPostBack
块内
【讨论】:
【参考方案7】:您还可以检查 HttpContext.Current.Request.Form["__EVENTTARGET"] 如果它以控件的 ID 结尾,则重新绑定 GridView 并将 Page.FindControl 与事件目标一起使用以查找触发事件
【讨论】:
【参考方案8】:我的问题是requiredfieldvalidator
解决方案是:我在回发时禁用它,然后在行命令后重新启用它。
【讨论】:
【参考方案9】:他们都做了,但一无所获然后发现:onrowcommand="GridView1_RowCommand" 在 html 中的 GridView1 定义行上。
【讨论】:
【参考方案10】:我通过从 GridView 中删除所有事件处理程序,然后重新构建代码,然后一次将它们添加回来,从而解决了这个问题的版本。
【讨论】:
不要认为这会改变任何事情。以上是关于GridView RowCommand 事件未触发的主要内容,如果未能解决你的问题,请参考以下文章
如何在gridview的rowcommand事件中在新选项卡中打开页面?
我们如何对 RowCommand、RowDeleting 等 gridview 事件进行 ajax 调用
如何在 c# ASP.NET 中使用 GridView_RowCommand 事件从 GridView 获取图像