2011-07-04 66 views
0

我想使動態控制生成,我設法把我的控制佔位符。我得到的問題,當我試圖從控制中獲取信息,因爲它不會「看到」控制器中的控件。按鈕onclick問題與佔位符


在Test.aspx文件
<asp:PlaceHolder ID="PlaceHolder1" runat="server"></asp:PlaceHolder>
<asp:PlaceHolder ID="PlaceHolder2" runat="server"></asp:PlaceHolder>

在頁面

protected void Page_Load(object sender, EventArgs e){ 
TextBox txt = new TextBox(); 
Button btn = new Button(); 
btn.OnClientClick = "button_click"; 
//btn.Attributes.Add("onClick","button_click"); I tried this way , yet didn't work 
btn.Attributes.Add("runat","server"); 
PlaceHolder1.Controls.Add(txt); 
PlaceHolder1.Controls.Add(btn);} 

和處理程序後面的代碼是:

protected void button_click(Object sender , EventArgs args){ 
string str = txt.Text; // I don't know if this would work , cuz this method didn't run onclick 
PlaceHolder2.Controls.Add(new LiteralControl("intered :"+str)); 
} 

非常感謝每個答案,
作爲訪問控制TextBox tmp = (TextBox)PlaceHolder1.FindControl("input"); 哪裏是「輸入」文本框是我的id設置

回答

2

你加入的方式是錯誤的事件。

應該是這樣,因爲你要添加的服務器端事件:

btn.Click += new EventHandler(button_click); 

相反btn.OnClientClick = "button_click";這就是我們通常會添加一些JavaScript函數的方式。

+0

抱歉打擾你,但什麼是類似的處理程序下拉列表?它應該在名單上還是在每個項目上? – Katia

+1

它應該像... DropDownList1.SelectedIndexChanged + = new EventHandler(DropDownList1_SelectedIndexChanged); –

1

OnClientClick是指JavaScript,用於在客戶端執行JavaScript函數。如果你想使用Click事件中,你給它分配一個事件處理程序是這樣的:

btn.Click += myHandler;

myHandler有以下方法簽名:這是

protected void myHandler(object sender, EvetArgs e)

1

btn.Click += new EventHandler(button_click);

的代碼你正在尋找


btn.OnClientClick = "button_click"; //btn.Attributes.Add("onClick","button_click")

它是客戶端腳本