Al seleccionar varios valores en el cuadro de lista, obtener un índice de excepción estaba fuera de los límites de la matriz en Linq to Entity [cerrado]
Frecuentes
Visto 444 veces
0
Tengo varios valores en ListBox. Cuando estoy seleccionando un valor único, mi código funciona bien.
Pero cuando estoy seleccionando valores múltiples, me está dando esta excepción: -
El índice esta fuera de los límites de la matriz.
Mi codigo es:
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();
}
}
Durante la primera iteración, funciona bien y también guarda el resultado de la primera iteración en mi base de datos. Pero cuando comienza la segunda iteración, me da la excepción anterior.
1 Respuestas
1
Usaste mal la variable de bucle, supongo que necesitas:
enrollDetails.TraineeID = Convert.ToInt32(item);
Déjame explicarte por qué tu código original item[i].ToString()
no funcionó:
Supongamos que tienes la lista. "2,1,3"
luego, con la división de cadenas, ha creado la matriz de cadenas: new [] { "2", "1", "3" }
Luego en tu ciclo
En la primera iteración
- ít fue
"2"
- i fue
0
So
item[i]
resuelto en"2"[0]
cual es"2"
Y funcionó.- ít fue
En la segunda iteración
- ít fue
"1"
- i fue
1
y su código resuelto en
"1"[1]
que arrojó una excepción porque"1"
tiene solo un carácter de largo, por lo que el índice estaba fuera de los límites de la matriz.- ít fue
Respondido el 08 de Septiembre de 12 a las 10:09
no entendí tu Un carácter largo punto. - RL89
las cadenas son básicamente una matriz de caracteres. Entonces la cuerda "test"
puede expresarse como la matriz de 't','e','s','t'
caracteres En C# todas las matrices están indexadas desde 0
. Entonces con el "1"[1]
quieres conseguir el segundo elemento forma la matriz de caracteres que tiene solo un carácter '1'
. - nemesv
Sí, entendiste tu punto. Si voy a escribir en lugar de ít artículo [0] entonces supongo que también funcionará. - RL89
No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas c# asp.net asp.net-mvc entity-framework linq-to-entities or haz tu propia pregunta.
Supongo que necesitas:
enrollDetails.TraineeID = Convert.ToInt32(item);
- nemesv