2013-09-30 68 views
2

我有一個ASP表在我的頁面,我創建其代碼隱藏的內容。對於這個特定的TableRow,我需要創建一個多行文本框和一個按鈕,當我單擊一個按鈕時,我將文本框內容保存到我的數據庫中。但是我的點擊功能沒有被調用。這裏是我的代碼:動態按鈕不呼叫點擊事件

ContentPlaceHolder cont = new ContentPlaceHolder(); 
HtmlGenericControl br = new HtmlGenericControl(); 
HtmlGenericControl br2 = new HtmlGenericControl(); 
TextBox texto = new TextBox(); 
Button btnSalvarTexto = new Button(); 
btnSalvarTexto.ID = "btnSalvar"; 
btnSalvarTexto.Click += new EventHandler(btnSalvarTexto_Click); 
btnSalvarTexto.CssClass = "botao"; 
btnSalvarTexto.Text = "Salvar"; 
cont.ID = "Placeholder"; 
texto.ID = "TextBoxObs"; 
texto.Width = 300; 
texto.TextMode = TextBoxMode.MultiLine; 
texto.Rows = 3; 
br.InnerHtml = "<br><br><div style='width:300px;background-color:#fff;padding:15px;'>"; 
cont.Controls.Add(br); 
cont.Controls.Add(texto); 
cont.Controls.Add(btnSalvarTexto); 
br2.InnerHtml = "</div>"; 
cont.Controls.Add(br2); 
td2.Controls.Add(cont); 
tr2.Cells.Add(td2); 
TablePrecos.Rows.Add(tr2); 

的事件處理程序:

​​

這有什麼錯我的代碼?我已經在btnSalvarTexto_Click函數中放置了一個斷點,它永遠不會到達它。

編輯:好吧,功能至極創建這些控件被稱爲CriarCapa,這就是所謂的Page_LoadComplete這樣的:

protected void Page_LoadComplete(object sender, EventArgs e) 
if (!IsPostBack) 
{ 
    CriarCapa(); 
} 

所以,是的,我測試,看看它不是一個回發。

+0

控件創建代碼在哪裏?在頁面加載?每次回發都調用該代碼塊嗎? – Bill

+0

發佈您的'Page_Load'代碼。 –

+0

我只在第一次輸入時在'Page_LoadComplete'中調用它 –

回答

3

您需要在每個頁面加載時重新創建按鈕,因爲按鈕被點擊並導致回發被擦除。

該按鈕會導致回發,這會在實際事件處理程序之前觸發頁面生命週期中的Page_Load事件。由於該按鈕是動態創建的,因此當頁面加載發生並且您的代碼僅在第一次生成動態內容時,不會創建該按鈕,也不會爲click事件處理事件處理程序。

+0

稍後再試試這個,謝謝。 –

+0

它的工作,非常感謝! –

+0

我打算用你的語言來嘲弄一下,只是因爲它應該可以幫助Thiago正確地考慮它。沒有什麼被「消滅」。 ASP在每次回發時重新創建頁面對象,因爲ASP是無狀態的。 ASP從aspx文件創建頁面對象,然後用POST信息(包括ViewState)對其進行水合處理。它使用該信息來決定是否有任何事件處理程序應該運行。如果創建按鈕的代碼沒有在每個POST上運行,則沒有按鈕可觸發該事件。 – Bill