asp.net - 按钮事件不会启动

时间:2009-10-14 10:53:36

标签: c# asp.net events button

我的页面上有一个搜索按钮,用于在数据库上运行查询,拉出并在表格中显示一些条目,并为每个条目创建一个按钮。它看起来像这样:

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);
}

问题是LinkBut​​ton事件在按下时不会触发(将LinkBut​​ton更改为简单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 - 但事件永远不会开始运行。

任何线索? 感谢。

4 个答案:

答案 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
    }