在代码中创建控件的问题
我在页面关联代码中使用代码创建控件,可是在下一次传到服务器上时,这个控件却无法通过访问。例如:我有个CheckBoxList,然后我在代码中创建ListItem,加入它,然后在按钮回传后它的Items里却没有我创建的控件
我怀疑是状态问题,可我设置了这个控件的状态为true
asp.net 2.0
------解决方案--------------------单步调试,看每步结果
------解决方案--------------------把代码贴出来
是否是你回传后在 page_load里面把CheckBoxList清空了?
------解决方案--------------------应该在page_init中初始化控件
如果你在page_load里初始化,不要用
if (!IsPostBack)
{
初始化控件
}
应该每次都初始化一次。
当然,最好还是在page_init中比较好。
------解决方案--------------------每次postback时需要先重新初始化控件,然后再可以访问控件
------解决方案--------------------先说明,代码没有细看。
如果是动态生成的控件,必须在页面PageLoad前加载才行,而且每次PostBack必须重新加载。
不然的话,控件的状态不会被保存。详细的资料,可以去cnblogs搜索动态加载控件,有很好的回复。
你要做的是:定义一个ViewState[ "CreateControl "]来存放是否要加载控件,如果是的话,则在PageLoad中调用创建控件的方法。
例:
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
//绑定你的数据
}
if(ViewState[ "CreateControl "] != null)
CreateControl();
}
protected void btn_Click(object sender, EventArgs e)
{
if(ViewState[ "CreateControl "] == null)
{
CreateControl();
ViewState[ "CreateControl "] = 1;
}
}
private void CreateControl()
{
//你创建控件的代码
}
代码是手写的,可能不对,但原理如此。
------解决方案--------------------这个没有办法,要不重新刷新页面,要不在LOAD事件每次都寝化一下.
------解决方案--------------------同意sisoxy(行风)
asp.net动态添加控件是有这个问题