Логическая ошибка в коде
ScriptManager.RegisterStartupScript(Page, Page.GetType(), "myModalEditStandType", "$('#myModalEditStandType').modal();", true); using (con) { using (SqlCommand cmd = new SqlCommand()) { cmd.CommandText = "select formid,formName from FormDetails where Edition_Id=" + Session["Edition_ID"].ToString() + " "; cmd.Connection = con; con.Open(); using (SqlDataReader sdr = cmd.ExecuteReader()) { chkFormNames.Items.Clear(); while (sdr.Read()) { ListItem item = new ListItem(); //string StandTypeID =sdr["StandTypeID"].ToString(); item.Text = sdr["formName"].ToString(); item.Value = sdr["FormId"].ToString(); // item.Selected = Convert.ToBoolean(sdr["IsSelected"]); standName = e.CommandName.ToString(); txtStandType.Text = standName.ToString(); txtStandTypeEdit_ModalBox.Text = standName.ToString(); string[] commandArgs = e.CommandArgument.ToString().Split(new char[] { ',' }); chkFormNames.Items.Add(item); foreach (var ca in commandArgs) { if(ca != null || ca != string.Empty ||ca != "") { FormDetails_ID =ca; if (item.Value == FormDetails_ID) { item.Selected = true; } } } } } con.Close(); } } grdManageStandType.DataBind();
ошибка в строке ниже:-
if (item.Value == FormDetails_ID) { item.Selected = true; }
на приведенном выше условии if есть логическая ошибка.
проблема только в этом коде
я отладил код и проверил. позвольте мне объяснить на примере ошибки
Напр.:-
StandTypeName Forms Edit Stand Type Co-Exhibitor 1, 2, 4 Edit
Существует множество форм. Пользователь нажимает на кнопку edit, затем открывается модальное всплывающее окно, и пользователь пишет имя StandTypeName и выбирает несколько чекбоксов из нескольких, а затем сохраняет его. После этого, когда пользователь снова открывает модальное всплывающее окно для одного из StandTypeName, скажем, здесь пользователь проверяет наличие соэкспонента, в столбце формы для соэкспонента есть 3 значения, но когда пользователь нажимает на кнопку редактирования, открывается модальное всплывающее окно и проверяется только первое значение, а остальные 2 значения не проверяются. Когда я отлаживаю код для первой формы, которая здесь 1, работает нормально, но для второй и третьей формы, которая здесь 2, 4 дает проблему
Здесь
if (item.Value == FormDetails_ID) { item.Selected = true; }
во время отладки, когда он проверяет наличие форм 2, item. value и FormDetails.ID обоих содержит значение =2, но не входит внутрь, если цикл непосредственно выходит из цикла
Что я уже пробовал:
ScriptManager.RegisterStartupScript(Page, Page.GetType(), "myModalEditStandType", "$('#myModalEditStandType').modal();", true); using (con) { using (SqlCommand cmd = new SqlCommand()) { cmd.CommandText = "select formid,formName from FormDetails where Edition_Id=" + Session["Edition_ID"].ToString() + " "; cmd.Connection = con; con.Open(); using (SqlDataReader sdr = cmd.ExecuteReader()) { while (sdr.Read()) { ListItem item = new ListItem(); //string StandTypeID =sdr["StandTypeID"].ToString(); item.Text = sdr["formName"].ToString(); item.Value = sdr["FormId"].ToString(); // item.Selected = Convert.ToBoolean(sdr["IsSelected"]); } } con.Close(); } } chkFormNames.Items.Clear(); standName = e.CommandName.ToString(); txtStandType.Text = standName.ToString(); txtStandTypeEdit_ModalBox.Text = standName.ToString(); string[] commandArgs = e.CommandArgument.ToString().Split(new char[] { ',' }); chkFormNames.Items.Add(item); foreach (var ca in commandArgs) { if(ca != null || ca != string.Empty ||ca != "") { FormDetails_ID =ca; if (item.Value == FormDetails_ID) { item.Selected = true; } } } grdManageStandType.DataBind();
Kornfeld Eliyahu Peter
Ты хочешь сказать, что во время отладки линии 'если (элемент.Значение == FormDetails_ID)', можно увидеть, что с обеих сторон имеет значение '2', но вы никогда не вводить свои верные части "если"?
Вы уверены, что значения отображаются правильно? Иногда (в зависимости от потока) отладчик отображает значения серым цветом, чтобы указать, что то, что вы видите, является старым, и вы должны вручную обновить их...
Member 13041059
да, я уверен, что я также сделал снимок ошибки, но я не знаю, как поместить его здесь, чтобы вы могли легко понять
Kornfeld Eliyahu Peter
Скопируйте сообщение об ошибке сюда? С линейным индикатором в вашем коде, например / / < - ошибка здесь: Сообщение об ошибке
Member 13041059
Он не отображает никаких сообщений об ошибках
в ниже код продукта.Значение == FormDetails_ID показывает верно по форме 1, когда эти 2 равны, но по форме 2,4, когда товар.Значение == FormDetails_ID равно то же пункт.выбранные показывает ложные
if (item. Value == FormDetails_ID) / / ошибка здесь
{
пункт.Selected = true;
}
Richard Deeming
Ваш код уязвим для SQL-инъекция[^]. НИКОГДА используйте конкатенацию строк для построения SQL-запроса. ВСЕГДА используйте параметризованный запрос.
Все, что вы хотели знать о SQL-инъекции (но боялись спросить) | Трой Хант[^]
Как я могу объяснить SQL-инъекцию без технического жаргона? | Обмен Стеками Информационной Безопасности[^]
Шпаргалка по параметризации запросов / OWASP[^]