我动态添加控制但是; easc回发事件我的控件消失了。我再也看不到我的控件了。
那么如何添加控件?
答案 0 :(得分:1)
因为您必须在每次回发时重新创建控件, see this article
答案 1 :(得分:0)
加载控件后,应始终在其ID属性中为UserControl分配唯一ID。并且你应该总是在回发时重新创建UserControl。
要保留后备数据(即TextBox'es),必须在调用base.LoadViewState之后在覆盖LoadViewState方法中加载UserControl - 在处理回发数据之前。
答案 2 :(得分:0)
在Page的Init事件中添加控件,在回发时它们将保存在viewstate中。确保他们有唯一的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
}
}
答案 3 :(得分: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");
}