//代码如下,我知道错误的原因,就是没有办法解决
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{ int i=0;
CheckBoxList cbl = new CheckBoxList();
cbl.ID = "cbl1";
cbl.RepeatDirection = RepeatDirection.Horizontal;
cbl.Items .Add (new ListItem (i.ToString ()));
cbl.Items.Add(new ListItem(i.ToString()));
cbl.Items.Add(new ListItem(i.ToString()));
form1.Controls.Add(cbl);
i++;
}
}
protected void Button1_Click(object sender, EventArgs e)
{
CheckBoxList cbl = new CheckBoxList();
cbl = (CheckBoxList)form1.FindControl("cbl1");/*无法用此引用到该控件*/
ViewState["cblInfo"] = cbl.SelectedItem.Text;/*这里就出错误了,因为使用了null引用(空引用)infamous Error!!!*/
Response .Write (ViewState ["cblInfo"].ToString ());
}
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{ int i=0;
CheckBoxList cbl = new CheckBoxList();
cbl.ID = "cbl1";
cbl.RepeatDirection = RepeatDirection.Horizontal;
cbl.Items .Add (new ListItem (i.ToString ()));
cbl.Items.Add(new ListItem(i.ToString()));
cbl.Items.Add(new ListItem(i.ToString()));
form1.Controls.Add(cbl);
i++;
}
}
protected void Button1_Click(object sender, EventArgs e)
{
CheckBoxList cbl = new CheckBoxList();
cbl = (CheckBoxList)form1.FindControl("cbl1");/*无法用此引用到该控件*/
ViewState["cblInfo"] = cbl.SelectedItem.Text;/*这里就出错误了,因为使用了null引用(空引用)infamous Error!!!*/
Response .Write (ViewState ["cblInfo"].ToString ());
}
如果使用foreach找不到那个动态生成控件,(只找到一个事先我放的button1)我想是
.net把动态生成的控件转换成html标签了。当我们测试进入页面,这时根本已经不是我们“想像的”服务器端控件了那些checkBoxList,都是静态标记了。所以无法使用,那么要怎么解决这个问题呢?还有就是如果我动态生成大量的CheckBoxList,就会出现下面的情况:
.net会自动给动态生成控件命名的,真是麻烦,即使你设了,
比如你动态生成几十个checkBoxList,都给它设了id,当生成
html页面后,你看html源码会发现,生成的id跟你命名的不一致。
有很多不同的。所以这个问题就比较不好解决了。
Request.Form["cbl1"]得到
//可以先在html界面中定义空的CheckBoxList空的//只能在设计时用,
我现在要从数据库加载的,所以,呵呵。只能用Request了。
动态创建不能保存状态,没办法,这是.net机制决定了。