2009-06-25 6 views
0

私はチェックボックスコントロールの各チェックボックスの後にdivを追加するカスタムチェックボックスコントロールを作成しています。 クラスは以下の通りです。カスタムチェックボックスリストコントロールasp.netのエラー。 "startIndexは文字列の長さを超えることはできません"

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 cannot be larger than length of string. Parameter name: startIndex Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Exception Details: System.ArgumentOutOfRangeException: startIndex cannot be larger than length of string. Parameter name: startIndex

Source Error:

An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below.

Stack Trace:

[ArgumentOutOfRangeException: startIndex cannot be larger than length of string. Parameter name: startIndex]
System.String.InternalSubStringWithChecks(Int32 startIndex, Int32 length, Boolean fAlwaysCopy) +7492915
System.Web.UI.WebControls.CheckBoxList.LoadPostData(String postDataKey, NameValueCollection postCollection) +60
System.Web.UI.WebControls.CheckBoxList.System.Web.UI.IPostBackDataHandler.LoadPostData(String postDataKey, NameValueCollection postCollection) +13
System.Web.UI.Page.ProcessPostData(NameValueCollection postData, Boolean fBeforeLoad) +346
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +1743

+0

で配列や、そのようなスタートを覚えておいてください.jasonlinham.co.uk/2009/04/checkboxlist-startindex-can not-be.html Jason Linhamのブログに感謝します。 – Greens

答えて

0

オーバーライドのrenderItem関数宣言にブレークポイントを設定します。 VSデバッグモードを使用してプロジェクトを開始し、どの変数が設定されているかをトレースします。私はどこかの空の文字列にstartindex 1を使用していると感じています。 // WWW:、私は「writer.WriteAttribute(」名前「一意ID& 『$』&repeatIndex)」 のhttpように名前を変更ソリューション を発見した0

関連する問題