日期:2014-05-19  浏览次数:20727 次

在代码中创建控件的问题
我在页面关联代码中使用代码创建控件,可是在下一次传到服务器上时,这个控件却无法通过访问。例如:我有个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动态添加控件是有这个问题