【发布时间】:2014-10-31 15:44:33
【问题描述】:
我正在为GridView 动态创建模板并将其数据绑定到我的 ASP.NET Web 应用程序中。我添加了标题列模板以及一列按钮。我遇到的麻烦是按钮的点击事件似乎永远不会触发。我尝试以多种方式抓取按钮(在 DataBind() 方法之后),但单击按钮时似乎没有任何反应。
注意:GridView 位于 ASP:UpdatePanel 和 AJAX 手风琴窗格内(Site.Master 上的 ToolkitScriptManager)。
这是aspx页面的相关部分(简化)...
<ajaxToolkit:AccordionPane ID="accordionSelfRegisteredUsers" runat="server">
<Header>Find All Self-Registered Users</Header>
<Content>
<asp:UpdatePanel ID="updatepnlSelfRegisteredUsers" runat="server">
<ContentTemplate>
<div id="divFixedHeaderSelfRegisteredUsers"></div>
<div id="divSelfRegisteredUsers">
<asp:GridView ID="gridviewSelfRegisteredUsers" runat="server"
AutoGenerateColumns="False" />
</div>
</ContentTemplate>
</asp:UpdatePanel>
</Content>
</ajaxToolkit:AccordionPane>
这是页面的 C# 代码。
一种方式...
List<Button> gvConfirmButtons = new List<Button>();
foreach (GridViewRow row in gridviewSelfRegisteredUsers.Rows)
{
foreach (Control c in row.Controls)
{
if (typeof(DataControlFieldCell) != c.GetType())
{
continue;
}
foreach (Control cf in c.Controls)
{
if (typeof(Button) == cf.GetType())
{
gvConfirmButtons.Add((Button)cf);
}
}
}
}
foreach (Button b in gvConfirmButtons)
{
b.Click += new EventHandler(btnGVSRUConfirm_Click);
}
还有一个我试过...
foreach (GridViewRow row in gridviewSelfRegisteredUsers.Rows)
{
foreach (Control c in row.Controls)
{
if (typeof(DataControlFieldCell) != c.GetType())
{
continue;
}
for (int i = 0; i < gridviewSelfRegisteredUsers.Rows.Count; i++)
{
//find buttons by client ID
Button b = (Button)c.FindControl(
"contentMain_gridviewSelfRegisteredUsers_btnConfirm_" + i);
b.Click += new EventHandler(btnGVSRUConfirm_Click);
}
}
}
找到按钮并且我可以访问它们,但是按钮的点击事件永远不会触发我在代码中的点击事件方法。
private void btnGVSRUConfirm_Click(object sender, EventArgs e)
{
}
对我可能会如何搞砸这件事有任何想法吗?我感觉它与用户单击按钮时页面生命周期内 gridview 的当前状态有关,但不确定如何继续。
【问题讨论】:
-
在页面生命周期中何时/何地运行附加处理程序的代码?
-
我在这个页面上有一个导航菜单,所以当用户单击该导航按钮以查看有关该内容的所有内容时,这一切都会发生。
-
我尝试同时添加 .Attributes["onclick"] 和 .OnClientClick 以将按钮指向一个 javascript 方法,这很有效。我只是无法使用 .Click 将其转到 C# 中的服务器端方法。任何有关故障排除步骤的想法或想法都将不胜感激。谢谢!
-
经过更多研究,我尝试了其他方法,但仍然无法正常工作。其他人提到事件连接需要在页面的 PreInit 或 Init 上完成,而不是在页面加载后完成,所以我创建了一个包含很多按钮的列表,将它们连接起来,然后稍后将它们添加到 GridView。没有骰子。还是调用事件方法失败。
标签: c# asp.net events gridview iteration