2016-08-19 280 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; 

事件處理程序正常工作。