none
ASP.NET2.0 投票製作,切換畫面時出現 startIndex 不可以大於字串的長度。 RRS feed

  • 問題

  • 各位先進,小弟不才在製作投票時,所發生的問題但如果正常操作卻不會有這樣的問題,首先,有一個投票的頁面BallotBox2.aspx 會出現目前可以參與投票的項目及其選項利用DropDownList來控制切換投票的項目,如圖1

    ,如果使用者利用DropDownList來切換時,則會變為如圖2圖3,但問題來了,如果使用者在切換前先點選投票項目裡面的選項時,如圖4,做切換時,就會發生錯誤,如圖5

    錯誤內容如下:

    startIndex 不可以大於字串的長度。
    參數名稱: startIndex

    描述: 在執行目前 Web 要求的過程中發生未處理的例外情形。請檢閱堆疊追蹤以取得錯誤的詳細資訊,以及在程式碼中產生的位置。

    例外詳細資訊: System.ArgumentOutOfRangeException: startIndex 不可以大於字串的長度。
    參數名稱: startIndex

    原始程式錯誤:

    在執行目前 Web 要求期間,產生未處理的例外狀況。如需有關例外狀況來源與位置的資訊,可以使用下列的例外狀況堆疊追蹤取得。

    堆疊追蹤:

    [ArgumentOutOfRangeException: startIndex 不可以大於字串的長度。
    參數名稱: startIndex]
       System.String.InternalSubStringWithChecks(Int32 startIndex, Int32 length, Boolean fAlwaysCopy) +2916027
       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) +381
       System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +4171
    


    版本資訊: Microsoft .NET Framework 版本:2.0.50727.1433; ASP.NET 版本:2.0.50727.1433

     

     

    在測試許久後,小弟不才無法順利解決,在此希望各位先進能提供有效的方法,附上完整程式碼壓縮檔(含資料庫檔案)

    http://winfoxilu.myweb.hinet.net/class00.rar

    2008年5月10日 下午 05:12

解答

  • 我認為你可能需要改一下設計的方法,因為怎麼看都是 ASP 的方法 ...

     

    1. 把那個 DropDownList 設定 AutoPostBack=true。

    2. 使用 Page.IsPostBack 來判斷來自於 DropDownList 產生的 PostBack。

    3. 在 Page.IsPostBack=false 時,填充 DropDownList 的資料。

    4. 處理 DropDownList 的 SelectedIndexChanged 事件,加入填充 RadioButtonList 或 CheckBoxList 資料的程式碼。

    5. 填充的程式碼可用 RadioButtonList.DataSource 或 CheckBoxList.DataSource 直接繫結,或是在網頁上放多個 SqlDataSource,然後使用 ControlParameter 來判斷。

    6. 在每次產生 PostBack 時,都先呼叫 RadioButtonList.Items.Clear() 或 CheckBoxList.Items.Clear() 把選項清空。

    7. 在取得投票結果時,取出 RadioButtonList.SelectedIndex,或是瀏覽 CheckBoxList.Items,把 Selected = true 的項目取出。

     

    也許你要重買一本書,那本書講的是真正 ASP.NET 的方法,而不是把 ASP 的方法拿到 ASP.NET 來做 ...

    2008年5月11日 上午 01:41
    版主