0

チェックボックスリストの各チェックボックスの後に 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

ソース エラー:

現在の Web 要求の実行中に未処理の例外が生成されました。例外の発生元と場所に関する情報は、以下の例外スタック トレースを使用して特定できます。

スタックトレース:

[ArgumentOutOfRangeException: startIndex は文字列の長さより大きくすることはできません。パラメータ名: 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 、ブール値 includeStagesAfterAsyncPoint) +1743

何か案は ?

4

1 に答える 1

0

オーバーライド renderItem 関数宣言にブレークポイントを配置します。VS デバッグ モードを使用してプロジェクトを開始し、どの変数が何に設定されているかを追跡します。どこかで空の文字列に 1 の startindex を使用しているように感じます。配列などは 0 から始まることに注意してください。

于 2009-07-14T13:35:29.243 に答える