我的页面上有一个搜索按钮,用于在数据库上运行查询,拉出并在表格中显示一些条目,并为每个条目创建一个按钮。它看起来像这样:
List<Friend> friends = SearchFriend(searchStr);
foreach (Friend f in friends)
{
TableCell addCell = new TableCell(), nameCell = new TableCell();
addCell.Text = "";
if (!f.IsMyFriend)
{
LinkButton addFriendBtn = new LinkButton();
addFriendBtn.Text = "Add as Friend";
addFriendBtn.Click += new EventHandler(addFriendBtn_Click);
addFriendBtn.ID = "add_" + f.ID.ToString();
addCell.Controls.Add(addFriendBtn);
}
nameCell.Text = f.Name;
TableRow row = new TableRow();
row.Cells.Add(addCell);
row.Cells.Add(nameCell);
SearchFriendTable.Rows.Add(row);
}
问题是LinkButton事件在按下时不会触发(将LinkButton更改为简单Button也不会解决此问题。)
这是我在这部分中得到的HTML:
<td><a id="ctl00_contentPH_add_2" href="javascript:__doPostBack('ctl00$contentPH$add_2','')">Add as Friend</a></td>
另外 - 当我在Page_Load上放置断点时,我确实看到__EVENTTARGET中包含此控件的id - 但事件永远不会开始运行。
任何线索? 感谢。
答案 0 :(得分:2)
添加到Himadri的答案:
动态添加的控件需要在页面init中重新连接。然后事件就会发生。我有一个非常类似的问题Dynamically loaded Controls in a wizard
答案 1 :(得分:1)
您在何时何地创建该按钮?
如果您动态创建按钮并想要收听事件,则必须在PageInit事件中创建该按钮。总是!所以不要使用if(!IsPostback)
答案 2 :(得分:1)
试试这个。
<td><a id="ctl00_contentPH_add_2" href="javascript:__doPostBack('<%=ct100_contentPH_add_2.ClientId %>','')">Add as Friend</a></td>
答案 3 :(得分:0)
为链接按钮添加事件处理程序并处理这些事件。
if (!f.IsMyFriend)
{
LinkButton addFriendBtn = new LinkButton();
addFriendBtn.Text = "Add as Friend";
addFriendBtn.Click += new EventHandler(addFriendBtn_Click);
addFriendBtn.ID = "add_" + f.ID.ToString();
addFriendBtn.Click += new EventHandler(addFriendBtn_Click);
addCell.Controls.Add(addFriendBtn);
}
事件:
protected void addFriendBtn_Click(object sender, EventArgs e)
{
LinkButton lnk = (LinkButton)sender;
// do your coding
}