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();
    }
}

在第一次迭代期间,它工作正常,并将第一次迭代结果保存在我的数据库中。但是当它开始第二次迭代时,它给了我上述异常

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. 在第二次迭代中

    • 项目"1"
    • 1

    并且您的代码解决了"1"[1]引发异常的问题,因为"1"只有一个字符长,因此索引超出了数组的范围。

于 2012-09-08T09:12:47.300 回答