我在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="|<" Enabled="<%# (_gridView.PageIndex > 0) %>" />
<asp:Button ID="PrevButton" runat="server" OnClick="PrevButton_Click" Text="<" Enabled="<%# (_gridView.PageIndex > 0) %>" />
<%# _gridView.PageIndex+1 %> of <%# _gridView.PageCount %>
<asp:Button ID="NextButton" runat="server" OnClick="NextButton_Click" Text=">" Enabled="<%# (_gridView.PageIndex < _gridView.PageCount-1) %>" />
<asp:Button ID="LastButton" runat="server" OnClick="LastButton_Click" Text=">|" 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事件吗?
答案 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")
{
...
}
}