日期:2014-05-18  浏览次数:20485 次

如何把动态生成的控件做成预定义控件?
例如,原来在网页上自动生成textbox等控件,如何变成预定义的控件,就像手工拉上去的控件?一定会在自动aspx文件和后台代码中添加一些东西,有方便的方法吗?

------解决方案--------------------
就算是在设计器中以拖放的方式布置控件内部也是通过new创建控件的实例, 并且也要保存控件视图状态的.


对于后台动态创建控件, 其ViewState的确是有些麻烦, 不过遵守创建后立即填加到Controls集合的方法可以避免视图状态丢失:
比如, 这样写法会丢失:
protected void Page_Load(object sender, EventArgs e)
{
ListBox lb = new ListBox();
if (!Page.IsPostBack)
{
lb.Items.Add("子项1");
}
this.form1.Controls.Add(lb);
}

而这样写法则会正确保存视图状态:
protected void Page_Load(object sender, EventArgs e)

ListBox lb = new ListBox();
this.form1.Controls.Add(lb);
if (!Page.IsPostBack)
{
lb.Items.Add("子项1");
}
}

其实在Control.Add方法中调用了TrackViwState方法打开视图跟踪状态, 才使得上面列表的item保留的.