关于页面动态添加控件
2007-04-26 22:50
381 查看
最近看到很多问题都是关于页面动态添加控件,页面postback以后,就取不到这些控件了。其实每次在页面上动态添加控件(或者在数据控件上动态添加列),它们的状态是不会被添加到页面的ViewState中去的,所以每次回送回来,它们就消失了,程序员只能手动把这些控件再次添加到页面上来,才会还原它们的状态。
MSDN上提供了一种参考的方式,override页面的LoadViewState方法,因为该方法调用是在page_load事件之前,它可以保证这些动态控件在事件处理函数里面是可用的。下面是一个很简单的例子,例子很简单,页面上动态添加10个textbox,在viewstate里面保存一个标志位,表示是否动态添加了这些控件,在LoadViewState函数里进行判断,如果有这个标志,则重新加载这些控件。
public bool IsDynamicLoadControl
{
get
{
object dynamic = ViewState["IsDynamicLoadControl"];
return dynamic == null ? false : true;
}
set
{
ViewState["IsDynamicLoadControl"] = value;
}
}
protected override void LoadViewState(object savedState)
{
base.LoadViewState(savedState);
if (IsDynamicLoadControl)
{
LoadTextBox();
}
}
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
LoadTextBox();
}
}
private void LoadTextBox()
{
for (int i = 0; i < 10; i++)
{
TextBox input = new TextBox();
input.ID = "input" + i.ToString();
this.form1.Controls.Add(input);
}
IsDynamicLoadControl = true;
}
最后可以进行测试一下:
TextBox tb = this.FindControl("input0") as TextBox;
ClientScript.RegisterStartupScript(
this.GetType(),
"",
string.Format("<script>alert('{0}')</script>",tb.Text));
MSDN上提供了一种参考的方式,override页面的LoadViewState方法,因为该方法调用是在page_load事件之前,它可以保证这些动态控件在事件处理函数里面是可用的。下面是一个很简单的例子,例子很简单,页面上动态添加10个textbox,在viewstate里面保存一个标志位,表示是否动态添加了这些控件,在LoadViewState函数里进行判断,如果有这个标志,则重新加载这些控件。
public bool IsDynamicLoadControl
{
get
{
object dynamic = ViewState["IsDynamicLoadControl"];
return dynamic == null ? false : true;
}
set
{
ViewState["IsDynamicLoadControl"] = value;
}
}
protected override void LoadViewState(object savedState)
{
base.LoadViewState(savedState);
if (IsDynamicLoadControl)
{
LoadTextBox();
}
}
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
LoadTextBox();
}
}
private void LoadTextBox()
{
for (int i = 0; i < 10; i++)
{
TextBox input = new TextBox();
input.ID = "input" + i.ToString();
this.form1.Controls.Add(input);
}
IsDynamicLoadControl = true;
}
最后可以进行测试一下:
TextBox tb = this.FindControl("input0") as TextBox;
ClientScript.RegisterStartupScript(
this.GetType(),
"",
string.Format("<script>alert('{0}')</script>",tb.Text));
相关文章推荐
- 关于页面动态添加控件
- 关于页面动态添加控件(转)
- 关于ASP.NET页面动态添加控件的总结
- 关于页面动态添加控件
- 关于页面动态添加控件
- 关于页面动态添加控件
- 关于页面动态添加控件
- 在页面周期的什么时候添加动态控件?
- 关于Asp.net 页面动态加载用户控件,出现“未能加载视图状态”的原因
- jquery实现动态添加控件,删除控件,页面性能优化
- 在ASP.NET页面中动态添加控件 (转)
- 在ASP.NET页面中动态添加控件
- 接上一篇,在cs文件中往页面动态添加meta标签时出现“控件包含代码块(即 ),因此无法修改控件集合”错误的解决方法
- 菲佣WPF——4(关于DataTemplate(2)动态控件添加神器)
- ASP.NET 页面动态添加用户控件技巧
- 在ASP.NET页面中动态添加控件
- GridView中 对数据编辑打开一个新页面 & 动态添加控件并获取其值
- 关于Request.Form和动态添加服务器控件
- 关于Asp.net 页面动态加载用户控件,出现“未能加载视图状态”的原因
- asp.net动态加载用户控件,关于后台添加、修改的思考