2010-01-11 37 views
0

我添加控制Dynamiclly但; easc回發事件我的控制消失了。我再也看不到我的控制。控制添加回發問題

那麼如何添加控件?

+0

你如何添加你的控件是在CreateChildControls事件上嗎?你能提供一些示例代碼嗎? – Sheff 2010-01-11 14:10:11

+0

Control _obj = LoadControl(「HaberObje.ascx」); String _Link = _row [「link」]。ToString(); String _Resim =「resim.png」; ((HaberObje)_obj).SetInfo(_row [「baslik」]。ToString) pnlHaber.Controls.Add(_obj); //這裏我添加控制 但是當Postback執行時我丟失了所有包含的控件 – atromgame 2010-01-11 14:24:02

回答

0

在頁面初始化事件中添加控件,並在回發時將它們保存在視圖狀態中。確保他們有一個唯一的ID。

請參閱此鏈接...

ASP.NET Add Control on postback

一個非常簡單的例子..

public partial class MyPage : Page 
{ 
    TextBox tb; 

    protected override void OnInit(EventArgs e) 
    { 
     base.OnInit(e); 
     tb = new TextBox(); 
     tb.ID = "testtb"; 
     Page.Form.Controls.Add(tb); 
    } 

    protected override void OnLoad(EventArgs e) 
    { 
     base.OnLoad(e); 
     //tb.Text will have whatever text the user entered upon postback 
    } 
} 
1

因爲你必須重新在每個回發的控件, see this article

+0

好吧,我可以保留在ViewState博客中嗎?我希望當我添加一個控件時,它必須在每個回發中。如果我重新創建所有控件,我將丟失控件的信息和用戶輸入的其他信息(如控件中的文本框)。 那麼解決方案是什麼? – atromgame 2010-01-11 14:36:16

0

加載控制後,應該始終在其ID屬性分配一個唯一的ID的用戶控件。你應該總是在回發時重新創建UserControl。

要保存posback數據(即TextBox'es),必須在調用base.LoadViewState之後,在處理回發數據之前,在overriden LoadViewState方法中加載UserControl。

+0

好的,但我可以保留在ViewState博客?我希望當我添加一個控件時,它必須在每個回發中。如果我重新創建所有控件,我將丟失控件的信息和用戶輸入的其他信息(如控件中的文本框)。那麼解決方案是什麼? – atromgame 2010-01-11 14:37:36

+0

我已經更新了我的答案。 – 2010-01-11 14:49:38

0

添加控件在運行時間和節省回傳:

int NumberOfControls = 0; 

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (!IsPostBack) 
    { 
     ViewState["b1"] = 0; 
    } 
    else 
    { 
     if ((int)ViewState["b1"] > 0) 
     { 
      CreateBtn(); 

     } 
    } 
} 


protected void btn1_Click(object sender, EventArgs e) 
{ 
    NumberOfControls = (int)ViewState["b1"]; 

    Button b1 = new Button(); 
    // b1.Attributes.Add("onclick", "x()"); 
    b1.Text = "test2"; 

    b1.ID = "b1_" + ++NumberOfControls; 
    b1.Click +=new System.EventHandler(btn11); 
    Panel1.Controls.Add(b1); 
    ViewState["b1"] = NumberOfControls; 
} 

protected void CreateBtn() 
{ 
    for (int i = 0; i < (int)ViewState["b1"];i++) 
    { 
     Button b1 = new Button(); 
     // b1.Attributes.Add("onclick", "x()"); 
     b1.Text = "test2"; 
     b1.ID = "b1_" + i; 
     b1.Click += new System.EventHandler(btn11); 
     Panel1.Controls.Add(b1); 
    } 
} 

protected void btn11(object sender, System.EventArgs e) 
{ 
    Response.Redirect("AboutUs.aspx"); 
}