Получение значения Checked для каждого элемента в CheckBoxList - PullRequest
0 голосов
/ 26 октября 2011

У меня есть список опций на моем сайте, которые пользователь может выбрать. То, что я хочу сделать, это предоставить функциональность для ограничения количества контента, который пользователь получает на основе его выбора в 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 не привязан к загрузке страницы.

1 Ответ

0 голосов
/ 26 октября 2011

Это так плохо, когда вы находите решение своей собственной проблемы, прежде чем кто-либо сможет даже угадать жизнеспособное решение ...

Тем не менее я исправил это!

ModuleList не нужно было создавать здесь, а вместо этого в .Click обработчике событий. Это также не было перенесено на остальные процедуры. где он использовался

Я только что объявил, что глобально использовал его оттуда.

Плохой плохой надзор с моей стороны.

...