自定义复选框列表控件asp.net中的错误。 “startIndex不能大于字符串的长度”

时间:2009-06-25 19:58:21

标签: asp.net vb.net custom-controls

我正在创建一个自定义复选框控件,以便在复选框列表中的每个复选框后添加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

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

在覆盖renderItem函数声明上放置一个断点。使用VS调试模式启动项目并跟踪设置的变量和内容。我有一种感觉,你在某个空字符串上使用1的startindex。请记住,数组等从0开始。