У меня есть список опций на моем сайте, которые пользователь может выбрать. То, что я хочу сделать, это предоставить функциональность для ограничения количества контента, который пользователь получает на основе его выбора в CheckBoxList.
Как только он выберет то, что хочет, он нажмет кнопку «Сохранить», и его выбор будет записан в базу данных.
CheckBoxList изначально заполняется из таблицы модулей. Это обеспечивает список модулей, которые пользователь может выбрать.
Когда он нажимает кнопку «Сохранить», код должен пройти через этот CheckBoxList и «выбрать» значения для CheckBoxes, которые были проверены, игнорируя те, которые не были.
Проблема заключается в том, что независимо от того, установлен флажок CheckBox или нет, отладчик возвращает значение False
для свойства CheckBoxList.Items(i).Selected
.
Вот мой код:
ПРИМЕЧАНИЕ: Мне известно, что код SQL здесь открыт для атак с использованием инъекций. Мне сказали, что я не должен беспокоиться об этом, хотя, как правило, я бы сделал это по-другому.
Private Sub AddUpdateOrg(ByVal OrganizationName As String, ByVal Action As String, Optional ByVal Target As Integer = Nothing)
' ###############################################################
' # ADD OR UPDATE AN ORGANIZATION #
' # ============================================================#
' # PARAMETERS #
' # ---------- #
' # OrganizationName As String #
' # The organization name that is to be stored in the database. #
' # #
' # Action As String #
' # What action will be taken by this procedure, add or update. #
' # #
' # Optional Target As Integer (Default: Nothing) #
' # If updating an existing record, specify the OrganizationID #
' # of the target organization. #
' ###############################################################
' Get the list of Modules selected for this organization
Dim ModuleList As New List(Of Integer)
For i As Integer = 0 To chkModules.Items.Count - 1
If chkModules.Items(i).Selected Then
ModuleList.Add(chkModules.Items(i).Value)
End If
Next
Dim sql As String = Nothing
Select Case Action
Case "Add"
sql = "insert into Organizations(OrganizationName) values ('" & OrganizationName & "')"
Case "Update"
sql = "update Organizations set OrganizationName = '" & OrganizationName & "' " & _
"where OrganizationID = " & Target
End Select
Dim dr As SqlDataReader = d.GetReader("select * from OrgModules where OrgID = " & Target)
If dr.HasRows Then
dr.Close()
UpdateModules(Target, ModuleList, "update")
Else
dr.Close()
UpdateModules(Target, ModuleList, "insert")
End If
d.DoCommand(sql)
End Sub
Возможно, такое поведение является результатом обратной передачи от кнопки сохранения. Если это так, я не уверен, как это исправить, поэтому любая помощь будет принята с благодарностью.
РЕДАКТИРОВАТЬ 1 После дальнейшего изучения кода я пересмотрел возможность того, что эта проблема вызвана обратной передачей, поскольку CheckBoxList не привязан к загрузке страницы.