2012-01-01 67 views
2

我想在後面的代碼中創建一個方法,該方法創建一個按鈕並將其放置在PlaceHolder中。我希望這個按鈕有一個Click事件。無法通過動態按鈕調用Click事件

調用「測試」方法按鈕後,正確放置,但沒有調用點擊事件。

private void test() 
    { 
     Button linkBtn1 = new Button(); 
     linkBtn1.Text = "linkBtn1"; 
     linkBtn1.OnClientClick = "return false;"; 
     linkBtn1.Click += new EventHandler(linkBtn1_Click); 
     PagesPlaceHolder.Controls.Add(linkBtn1);   

    } 

    void linkBtn1_Click(object sender, EventArgs e) 
    { 
     throw new NotImplementedException(); 
    } 
+6

也許是因爲這一行'linkBtn1.OnClientClick =樣本「返回false;」; '? – oleksii 2012-01-01 20:38:39

+0

它可能不是,它肯定會刪除OnClientClick,或者如果您想返回某些內容來覆蓋其他行爲,請返回true以讓其單擊。 – Aristos 2012-01-01 21:40:12

回答

2

刪除OnClientClick = "return false;"是必要的,但不足以使其發揮作用。如果您希望觸發動態添加按鈕上的事件處理程序,則每次頁面加載時,都需要添加此按鈕

一個簡單的方法是保存按鈕已添加到ViewState中,然後檢查PageLoad並在需要時重新添加按鈕。

下面是對我的作品(並引發點擊時除外)

protected void Page_Load(object sender, EventArgs e) 
{ 
    //if the button was added previously, add it again 
    if (ViewState["Added"] != null && (bool)ViewState["Added"]) 
     addButton(); 
} 

//this is the method that adds the button 
protected void add_Click(object sender, EventArgs e) { 
    ViewState["Added"] = true; 
    addButton(); 
} 

private void addButton() { 
    Button linkBtn1 = new Button(); 
    linkBtn1.Text = "linkBtn1"; 
    linkBtn1.Click += new EventHandler(linkBtn1_Click); 
    placeholder1.Controls.Add(linkBtn1); 
} 

void linkBtn1_Click(object sender, EventArgs e) { 
    throw new Exception("Button Click Event Triggered. Hello yellow screen!!!"); 
} 
0

正如@oleksii指出的那樣,客戶端代碼返回false,因此表單永遠不會被提交。你需要評論這一點,然後你的事件處理程序應該觸發。