C# foreach-цикл, пропускающий некоторые значения во время итерации
У меня есть элемент управления multi-select, в котором мне нужно зафиксировать все выбранные элементы в таблице SQL Server. Этот вопрос связан с тем, чего я пытаюсь здесь достичь https://www.codeproject.com/Questions/5254981/How-do-I-resolve-error-cannot-convert-char-to-int
Когда я отправляю форму, фиксируется только 1 элемент, хотя при проверке с помощью шагового отладчика все выбранные значения действительно заполняются переменной employeees4 (прилагаемое изображение). Я заметил, что только первый пункт в отборе становится совершенным. Какая-нибудь помощь в том, что я могу упустить?
Пожалуйста, обратите внимание, что я использовал немного другие имена переменных в прилагаемом отладочном образе, но код остается тем же самым.
Я также внес изменения в реализацию проекта :
1. Добавил вспомогательный метод, который преобразует строку массива в строку. (ConvertStringArrayToString)
2. разделение результирующей строки на отдельные элементы.
В контроллере у меня есть:
[HttpPost] public ActionResult NewOverTimeRequest(FormCollection formcollection) { Models.Employee.OverTimeRequest request = new Models.Employee.OverTimeRequest(); try { var batch = new OvertimeBatch(); request.employees = GetEmployees(); request.EmployeeNumber = new string[] { Convert.ToString(formcollection["EmployeeNumber"]) }; var employeees1= request.EmployeeNumber.Split(','); string[] employeees2 = employeees.SingleOrDefault().ToArray(); string employeees3 = Helpers.ConvertStringArrayToString( employeees2); string[] employeees4 =employeees3.Split(new char[] { ',' }); if (ModelState.IsValid) { foreach ( string emp in employeees4) { using (SqlConnection conn = new SqlConnection(Helpers.DatabaseConnect)) { SqlCommand cmd = new SqlCommand("SubmitOverTime", conn); cmd.CommandType = CommandType.StoredProcedure; cmd.Parameters.AddWithValue("@EmpNum", emp); cmd.Parameters.AddWithValue("@DateDone", DateTime.Now); conn.Open(); cmd.ExecuteNonQuery(); } } return RedirectToAction("OverTime"); } catch (Exception ex) { ViewBag.ErrorMessage = ex.Message; return View(request); } return RedirectToAction("OverTime"); } }
Модель
[Required] [Display(Name = "Employee ")] public string[] EmployeeNumber { get; set; } public Employee Employee { get; set; } public String DisplayName { get; set; } public IEnumerable<SelectListItem> employees { get; set; }
Я прикрепил свою отладку здесь : https://drive.google.com/open?id=1HvY6swhfdTyzBpcFRJE511_LHREOltbH
Что я уже пробовал:
Я попытался пройти через поток программы , значения действительно заполняются employeees4, но каким-то образом, когда поток входит в цикл, только элемент первого индекса сохраняется в базе данных.