GridView RowCommand事件未触发

我有一个看起来像这样的GridView:

  ...   <asp:Button ID="Button1" ButtonType="Button" CommandName="ItemExport" CommandArgument='' Text="Export" runat="server" />   ...   

这是RowCommand

 protected void RowCommand(object sender, GridViewCommandEventArgs e) { if (e.CommandName == "ItemExport") { // etc. } } 

单击该按钮根本不会触发RowCommand事件。 但是,当我在GridView的寻呼机中单击页面索引时,会触发RowCommand

不能在Page_Load中的回发上绑定网格,只有在更改导致网格重新加载数据(fe排序,分页)并且仅在相应的事件处理程序中。

另一个可能的原因:您是否在某处禁用了ViewState?

我刚遇到一位遇到同样问题的同事; 他的原因是在asp:GridView元素中没有设置onrowcommand=属性。 这应该设置为将处理事件的处理程序的名称。

…以防万一有同样的问题!

在按钮标记中使用CausesValidation="false" 。 它可以解决问题。

grid.Databind()放在if (!IsPostBack)里面

 protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { grid.DataBind(); } } 

如果你的代码是这样的:

  protected void Page_Load(object sender, EventArgs e) { BindGrid(dgv); if (!IsPostBack) { } } 

放入isposback {}行内的BindGrid()

您还可以检查HttpContext.Current.Request.Form [“__ EVENTTARGET”],如果它以控件的ID结尾,重新绑定GridView并使用Page.FindControl和事件目标来查找触发事件的控件

我的问题是requiredfieldvalidator

解决方案是:我在post back后禁用它,然后在row命令后重新启用它。

试过上面的答案,仍然无法回复。 结束是唯一ID问题。 我有两个按钮具有相同的ID。 (在不同的网格视图中。我的第二个是在用户控件中)

更改为唯一ID解决了我的回发问题。

只是想我会发布任何其他没有运气尝试其他选项的人。