我正在创建一个自定义复选框控件,以便在复选框列表中的每个复选框后添加div。 课程如下。
Imports System.Web.UI.WebControls
Imports System.ComponentModel
Imports System.Globalization
Public Class MyCheckboxListCheckBox
Inherits CheckBoxList
Implements IRepeatInfoUser
Protected Overrides Sub RenderItem(ByVal itemType As ListItemType, ByVal repeatIndex As Integer, ByVal repeatInfo As RepeatInfo, ByVal writer As HtmlTextWriter)
writer.WriteBeginTag("input")
writer.WriteAttribute("type", "checkbox")
writer.WriteAttribute("name", UniqueID)
writer.WriteAttribute("id", (ClientID & "_") + repeatIndex.ToString(NumberFormatInfo.InvariantInfo))
writer.WriteAttribute("value", Items(repeatIndex).Value)
Dim attrs As System.Web.UI.AttributeCollection = Items(repeatIndex).Attributes
For Each key As String In attrs.Keys
writer.WriteAttribute(key, attrs(key))
Next
writer.Write(">")
writer.Write(Items(repeatIndex).Text)
' writer.Write("<div id=" & "mynewDiv" & Items(repeatIndex).Value & "></div>")
End Sub
End Class
但是当我在页面中使用它并调用保存时出现错误。错误是:
startIndex不能大于 字符串的长度。参数名称: startIndex描述:未处理 期间发生了异常 执行当前的Web请求。 请查看堆栈跟踪了解更多信息 有关错误的信息和位置 它起源于代码。
异常详细信息: System.ArgumentOutOfRangeException: startIndex不能大于 字符串的长度。参数名称: 的startIndex
来源错误:
生成了未处理的异常 在执行当前 网络请求。有关的信息 异常的起源和位置 可以使用例外来识别 堆栈跟踪下面。
堆栈追踪:
[ArgumentOutOfRangeException: startIndex不能大于 字符串的长度。参数名称: 的startIndex]
System.String.InternalSubStringWithChecks(的Int32 startIndex,Int32 length,Boolean fAlwaysCopy)+7492915
System.Web.UI.WebControls.CheckBoxList.LoadPostData(字符串 postDataKey,NameValueCollection postCollection)+60
System.Web.UI.WebControls.CheckBoxList.System.Web.UI.IPostBackDataHandler.LoadPostData(字符串 postDataKey,NameValueCollection postCollection)+13
System.Web.UI.Page.ProcessPostData(NameValueCollection中 postData,Boolean fBeforeLoad)+346
System.Web.UI.Page.ProcessRequestMain(布尔 includeStagesBeforeAsyncPoint,Boolean includeStagesAfterAsyncPoint)+1743
有什么想法吗?
答案 0 :(得分:0)
在覆盖renderItem函数声明上放置一个断点。使用VS调试模式启动项目并跟踪设置的变量和内容。我有一种感觉,你在某个空字符串上使用1的startindex。请记住,数组等从0开始。