2016-08-19 182 views
0

我有一个小的ASP Web应用程序,可用于确定2个用户是否被分配了相同的座位号。如何将动态添加事件添加到动态创建的按钮

要显示结果/功能,我决定使用asp:Table,每行有两个按钮(每个用户一个)。

管理员可以单击其中一个按钮从系统中清除该用户的座位号码值。

这里是它建立表格单元格的代码:

BuildDuplicateTable(在Page_Load调用)

private void BuildDuplicateTable(List<Duplicate> duplicates) 
{ 
    foreach (var dup in duplicates) 
    { 
     var row = new TableRow(); 
     var user1cell = new TableCell(); 
     var seatcell = new TableCell(); 
     var user2cell = new TableCell(); 

     var button1 = new Button(); 
     button1.Text = $"{dup.UserOne.UserName}"; 
     var button1cell = new TableCell(); 
     button1cell.Controls.Add(button1); 
     button1.Click += new EventHandler(Test); 

     var button2 = new Button(); 
     button2.Text = $"{dup.UserTwo.UserName}"; 
     var button2cell = new TableCell(); 
     button2cell.Controls.Add(button2); 
     button2.OnClientClick = "return true"; 
     button2.Click += (sender, eventArgs) => 
     { 
      ActiveDirectory.ClearProperty(dup.UserTwo.UserName, "extensionAttribute2"); 
     }; 

     user1cell.Text = dup.UserOne.UserName; 
     seatcell.Text = dup.UserOne.SeatNumber; 
     user2cell.Text = dup.UserTwo.UserName; 

     row.Cells.Add(button1cell); 
     row.Cells.Add(seatcell); 
     row.Cells.Add(button2cell); 

     MyAspTable.Rows.Add(row); 
    } 
} 

我的问题是,当我点击任何按钮,页面很简单刷新,并且数据不再显示(正如我在Page_Load中处理回发)。我的事件处理程序永远不会触发......请注意,在上面的代码中,我留下了两个独立的方法来附加我尝试过的事件处理程序 - 它们都不起作用!

重复

class Duplicate 
{ 
    public UserSeatNumberRelationship UserOne; 
    public UserSeatNumberRelationship UserTwo; 

    public Duplicate(UserSeatNumberRelationship userone, UserSeatNumberRelationship usertwo) 
    { 
     UserOne = userone; 
     UserTwo = usertwo; 
    } 
} 

UserSeatNumberRelationship

class UserSeatNumberRelationship 
{ 
    public string UserName; 
    public string SeatNumber; 

    public UserSeatNumberRelationship(string username, string seatnumber) 
    { 
     UserName = username; 
     SeatNumber = seatnumber; 
    } 
} 

的Page_Load

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (Page.IsPostBack) return; 
    DuplicateList = FindDuplicates(); 
    BuildDuplicateTable(DuplicateList); 
} 

测试

protected void Test(object sender, EventArgs e) 
    { 
     ActiveDirectory.ClearProperty(UserName, "extensionAttribute2"); 
    } 
+1

你在哪里调用'BuildDuplicateTable'? – techspider

+0

我在'Page_Load'里调用' – Bassie

+0

把'if(!IsPostBack){BuildDuplicateTable(<>); }'以确保表格不会在每个帖子后面重新创建;重新创建可能会失去以前的控件上下文 – techspider

回答

0

由于ConnersFan在评论中提到,这是由我在Page_LoadPostBack处理程序引起的。

因此,移除该行后

if (Page.IsPostBack) return; 

事件处理程序正常工作。