2010-01-11 38 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"); 
}