我动态添加控制但是;easc 回发事件我的控件不见了。我再也看不到我的控件了。
那么如何添加控件呢?
因为您必须在每次回发时重新创建控件, 请参阅这篇文章
加载控件后,您应该始终在其 ID 属性中为 UserControl 分配一个唯一 ID。而且您应该始终在回发时重新创建 UserControl。
要保留回发数据(即 TextBox'es),您必须在调用 base.LoadViewState 之后在覆盖的 LoadViewState 方法中加载 UserControl - 在处理回发数据之前。
在 Page 的 Init 事件中添加控件,它们将在回发时保留在视图状态中。确保他们有一个唯一的 ID。
看这个链接...
一个非常琐碎的例子..
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
}
}
在运行时添加控件并保存回发:
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");
}