我加入控制Dynamiclly但是, EASC回发事件我的控制都没有了。 我不能再看到我的控制。
所以,我怎么可以添加控制?
我加入控制Dynamiclly但是, EASC回发事件我的控制都没有了。 我不能再看到我的控制。
所以,我怎么可以添加控制?
添加控件在页面的Init事件,他们将在视图状态回发时被保留。 确保他们有一个唯一的ID。
请参阅此链接...
ASP.NET添加控件在回发
一个非常简单的例子..
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
}
}
因为你必须重新在每个回发的控件, 请参阅本文
加载控制后,应该始终在其ID属性分配一个唯一的ID的用户控件。 你应该总是重新创建回传用户控件。
为了保持posback数据(即TextBox'es)必须在被覆盖的LoadViewState方法调用base.LoadViewState后加载用户控件 - 回传数据的处理之前。
添加控件在运行时间和节省回传:
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");
}