后台代码:CheckBoxList cc = new CheckBoxList();
cc.ID = "cc";
cc.RepeatColumns = 5;
Panel1.Controls.Add(cc);
for (int m = 0; m < 3; m++)
{
cc.Items.Add(new ListItem(m.ToString(), m.ToString()));
}前台正常产生的这个checkboxlist控件的代码变成了
<input id="cc_0" type="checkbox" name="cc$0" />就是ID和定义的不同了,生成的代码如下:
<table id="cc" border="0">
<tr>
<td>
<input id="cc_0" type="checkbox" name="cc$0" /><label for="cc_0">0</label>
</td>
<td>
<input id="cc_1" type="checkbox" name="cc$1" /><label for="cc_1">1</label>
</td>
<td>
<input id="cc_2" type="checkbox" name="cc$2" /><label for="cc_2">2</label>
</td>
</tr>
</table>
进行是否选择了验证的时候,打算再用循环来判断是否选中,代码如下:CheckBoxList eee = (CheckBoxList)form1.FindControl("cc");
for (int i = 0; i < eee.Items.Count; i++)
{ if (eee.Items[i].Selected)
{
a = true;
break;
}
}
if (!a)
{
Label.Text = "题目为必填";
}出错,提示:未将对象引用设置到对象的实例。
发现eee都是null的,怎么办?找到MSDN文档,发现它给的是很正常的ID="checklistbox1" ,可是在后台生成的这控件ID都变了,要怎么解决啊?
cc.ID = "cc";
cc.RepeatColumns = 5;
Panel1.Controls.Add(cc);
for (int m = 0; m < 3; m++)
{
cc.Items.Add(new ListItem(m.ToString(), m.ToString()));
}前台正常产生的这个checkboxlist控件的代码变成了
<input id="cc_0" type="checkbox" name="cc$0" />就是ID和定义的不同了,生成的代码如下:
<table id="cc" border="0">
<tr>
<td>
<input id="cc_0" type="checkbox" name="cc$0" /><label for="cc_0">0</label>
</td>
<td>
<input id="cc_1" type="checkbox" name="cc$1" /><label for="cc_1">1</label>
</td>
<td>
<input id="cc_2" type="checkbox" name="cc$2" /><label for="cc_2">2</label>
</td>
</tr>
</table>
进行是否选择了验证的时候,打算再用循环来判断是否选中,代码如下:CheckBoxList eee = (CheckBoxList)form1.FindControl("cc");
for (int i = 0; i < eee.Items.Count; i++)
{ if (eee.Items[i].Selected)
{
a = true;
break;
}
}
if (!a)
{
Label.Text = "题目为必填";
}出错,提示:未将对象引用设置到对象的实例。
发现eee都是null的,怎么办?找到MSDN文档,发现它给的是很正常的ID="checklistbox1" ,可是在后台生成的这控件ID都变了,要怎么解决啊?
---
既是要如何??
Request.Form的方式,你上面的Request.Form["cc"]其中cc肯定不是你前台的ID值,得到前台ID值的方法是右键查看源码,在源码中看到的ID值才是你要的ID值
不知道行不行,呵呵,只是发表下自己的意见关注
CheckBoxList cc = new CheckBoxList();
位置有关。在哪里生成?
========
在你执行这句之前, 确保动态添加 CheckBoxList 的那段代码【已经执行】!!!记住:
动态创建控件时的原则是:页面回发的时候,动态创建控件的代码【同样要执行】!否则之前请求创建的控件已经不再存在!
你的问题,与客户端呈现的 html id 无关!
startIndex 不能大于字符串长度。
参数名: startIndex
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 异常详细信息: System.ArgumentOutOfRangeException: startIndex 不能大于字符串长度。
参数名: startIndex源错误: 执行当前 Web 请求期间生成了未处理的异常。可以使用下面的异常堆栈跟踪信息确定有关异常原因和发生位置的信息。 堆栈跟踪:
[ArgumentOutOfRangeException: startIndex 不能大于字符串长度。
参数名: startIndex]
System.String.InternalSubStringWithChecks(Int32 startIndex, Int32 length, Boolean fAlwaysCopy) +2915211
System.Web.UI.WebControls.CheckBoxList.LoadPostData(String postDataKey, NameValueCollection postCollection) +54
System.Web.UI.WebControls.CheckBoxList.System.Web.UI.IPostBackDataHandler.LoadPostData(String postDataKey, NameValueCollection postCollection) +11
System.Web.UI.Page.ProcessPostData(NameValueCollection postData, Boolean fBeforeLoad) +353
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +1575