0

ListBoxに複数の値があります。単一の値を選択しているとき、コードは正常に機能しています。

しかし、私が複数の値を選択しているとき、それは私にこの例外を与えています:-

インデックスが配列の範囲外だった。

私のコードは次のとおりです。

if (submitButton == "Enroll Trainee")
{
    if (Request.Form["NonEnroll"] != null)
    {
        int i = 0;
        string[] selected = Request.Form["NonEnroll"].Split(',');
        if (selected != null)
        {
            if (selected.Count() != 0)
            {
                foreach (var item in selected)
                {
                    enrollDetails.TraineeID = Convert.ToInt32(item[i].ToString());//Getting Exception here
                    enrollDetails.TrainerID = Convert.ToInt32(Session["user"].ToString());
                    enrollDetails.dt = DateTime.Now;
                    db.EnrollTrainee.Add(enrollDetails);
                    db.SaveChanges();
                    i++;
                }

            }
        }
        populatelistbox();
        return View();
    }
}

最初の反復中は正常に機能しており、最初の反復結果をデータベースに保存します。しかし、2回目の反復を開始すると、上記の例外が発生します

4

1 に答える 1

1

ループ変数を誤用しました。必要だと思います。

enrollDetails.TraineeID = Convert.ToInt32(item);

item[i].ToString()元のコードが機能しなかった理由を説明しましょう。

"2,1,3"リストを取得し、文字列を分割して文字列の配列を作成したと仮定します。new [] { "2", "1", "3" }

次に、ループ内

  1. 最初の反復で

    • アイテム"2"
    • 0

    どちらがitem[i]解決したので、うまくいきました。"2"[0]"2"

  2. 2回目の反復で

    • アイテム"1"
    • 1

    また、コードの長さが1文字しかないため、インデックスが配列の境界外にある"1"[1]ため、例外がスローされたコードが解決されました。"1"

于 2012-09-08T09:12:47.300 に答える