控制添加回发问题
回答
在页面初始化事件中添加控件,并在回发时将它们保存在视图状态中。确保他们有一个唯一的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
}
}
因为你必须重新在每个回发的控件, see this article
好吧,我可以保留在ViewState博客中吗?我希望当我添加一个控件时,它必须在每个回发中。如果我重新创建所有控件,我将丢失控件的信息和用户输入的其他信息(如控件中的文本框)。 那么解决方案是什么? – atromgame 2010-01-11 14:36:16
加载控制后,应该始终在其ID属性分配一个唯一的ID的用户控件。你应该总是在回发时重新创建UserControl。
要保存posback数据(即TextBox'es),必须在调用base.LoadViewState之后,在处理回发数据之前,在overriden LoadViewState方法中加载UserControl。
好的,但我可以保留在ViewState博客?我希望当我添加一个控件时,它必须在每个回发中。如果我重新创建所有控件,我将丢失控件的信息和用户输入的其他信息(如控件中的文本框)。那么解决方案是什么? – atromgame 2010-01-11 14:37:36
我已经更新了我的答案。 – 2010-01-11 14:49:38
添加控件在运行时间和节省回传:
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");
}
你如何添加你的控件是在CreateChildControls事件上吗?你能提供一些示例代码吗? – Sheff 2010-01-11 14:10:11
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