2011-11-14 51 views
1

我正在使用XSLT動態地在頁面上動態生成所有控件。他們被渲染並添加到標記右側。這裏的問題是我想爲這個動態生成的控件編寫事件處理,我不知道如何實現,因爲在完美的開發環境中,我們通常雙擊aspx頁面上的控件,.NET爲您創建相關事件在aspx.cs頁面的後面。動態生成控件的事件處理

任何想法?

+0

黑客方法:查看自動生成的代碼文件並複製它的功能。 –

+0

你能否詳細說明一下? – TeaLeave

回答

0

您需要使用適當的處理程序創建一個方法,並在創建它們時將其連接到動態創建的控件。

protected void MyHandler(object sender, EventArgs e) 
{ 
    //Do some stuff 
} 
當您創建控件

LinkButton lb = new LinkButton(); 
    lb.ID = "lbexample"; 
    lb.Click += MyHandler; 
Page.Form.Controls.Add(lb); 

但是,上回傳,在重建這些控件,因爲他們或事件將不會觸發它是非常重要的

。您需要首先重新創建控件,以便可以引發事件,因此您需要創建控件所需的任何數據都必須在後期使用您所熟悉的任何狀態機制。

+0

我認爲我們在這裏看到代表這樣的東西。那很好。其實,這是我想考慮的第二個選擇,因爲它仍然是服務器端。我在客戶端遇到了非常酷的東西。 JQuery具有以下功能:http://api.jquery.com/click/。你怎麼看待這件事? – TeaLeave

1

動態添加的控件通常無法在回發後存活。

無法雙擊或甚至用_selectedIndexChanged鍵輸入控件的預期名稱會得到你想要的。

這是假設(請讓我們知道,如果我是對還是錯)您要添加HTML控件,而不是動態ASP.NET控件。

+0

客戶端可以想到的任何事情嗎?使用JQuery或Javascript的東西? – TeaLeave

+1

-1:如果在頁面初始化中生成它們,則動態生成的控件可以很好地回存。 –

+0

優秀的點,沒有跨過我的腦海。如果您可以更新您的答案以反映這種可能性,我可以將-1反轉。 –

0

如果要執行客戶端事件,可以通過添加適當的屬性來指定要激發的方法的名稱(或代碼本身)。

例如,如果你想火myCheckBox_OnClick當用戶點擊您的動態生成的複選框,可以做到以下幾點:

myDynamicallyGeneratedControl.Attributes.Add("onclick", "myCheckBox_OnClick"); 

你也可以生成的JavaScript代碼被執行,並將其添加通過頁面的ClientScript.RegisterStartupScript方法到頁面。

+0

什麼是「myDynamicallyGeneratedControl」的類型? – TeaLeave

+0

我的回覆假設您正在生成ASP.Net控件。在我的答案中,控件的類型是System.Web.UI.WebControls.CheckBox。 –