UserControl OnClick事件永远不会发生

时间:2011-07-27 19:51:28

标签: c# asp.net gridview user-controls onclick

我在C#/ asp.net中有一个Web项目。我有一个带有GridView的UserControl,其中有一个Button编码。该按钮具有OnClick事件,这将导致它重定向到另一个页面。此时,无论按下按钮多少次,onclick事件都不会发生。但是,如果我将按钮硬编码到使用用户控件的页面中(后面的代码中包含事件),则onclick事件可以正常工作。

此外,当我在UserControl的GridView外部移动按钮时,它工作正常。但是,我受到空间的限制,需要将它放在页面底部的寻呼机栏中。

<PagerTemplate>
     <table width="100%" cellpadding="0" cellspacing="0">
        <tr>
           <td align="left" valign="middle">
              <asp:Panel cssClass="PagerPanel" runat="server">
                 <asp:Button ID="FirstButton" runat="server" OnClick="FirstButton_Click" Text="|&lt;"  Enabled="<%# (_gridView.PageIndex > 0) %>" />
                 <asp:Button ID="PrevButton" runat="server" OnClick="PrevButton_Click" Text="&lt;" Enabled="<%# (_gridView.PageIndex > 0) %>" />
                 <%# _gridView.PageIndex+1  %> of <%# _gridView.PageCount %>
                 <asp:Button ID="NextButton" runat="server" OnClick="NextButton_Click" Text="&gt;" Enabled="<%# (_gridView.PageIndex < _gridView.PageCount-1) %>" />
                 <asp:Button ID="LastButton" runat="server" OnClick="LastButton_Click" Text="&gt;|" Enabled="<%# (_gridView.PageIndex < _gridView.PageCount-1) %>" />
              </asp:Panel>
           </td>

           <td>
           <asp:Button ID="Button1" OnClick="AddButton_Click" runat="server"       
              Text="Button" />
           </td>
        </tr>
     </table>
  </PagerTemplate>

UserControl代码背后:

protected void AddButton_Click(object sender, EventArgs e)
{
    Response.Redirect("thisurl...");
}

不确定我还能做些什么来处理这个点击事件。显然,GridView阻止它以某种方式触发。无论如何,UserControl的GridView可以有一个按钮来处理onclick事件吗?

2 个答案:

答案 0 :(得分:2)

问题是因为事件必须在执行事件处理程序之前绑定到控件,但是因为按钮是由模板动态添加到页面的,所以在事件触发时它不存在

有很多方法可以解决这个问题,但我会考虑使用EnsureChildControls。

http://msdn.microsoft.com/en-us/library/system.web.ui.control.ensurechildcontrols.aspx

答案 1 :(得分:1)

您应该将CommandName =“Button”属性添加到asp:Button声明中,然后连接GridView的RowCommand事件。然后,在OnRowCommand事件处理程序中检查命令名称(即if(e.CommandName ==“Button”)。

<asp:Button ID="Button1" CommandName="Button" runat="server" Text="Button" />

...

protected void GridView_RowCommand(object sender, GridViewCommandEventArgs e)
{
  if (e.CommandName == "Button")
  {
    ...
  }
}