获取CheckBoxList中每个项目的Checked值

时间:2011-10-26 09:16:33

标签: asp.net vb.net checkboxlist

我的网站上有一个用户可以选择的选项列表。我想要做的是提供功能来限制用户根据他在CheckBoxList中的选择获得的内容量。 一旦他选择了他想要的东西,他就会点击保存,他的选择将被写入​​数据库。 CheckBoxList最初是从Modules表填充的。这提供了用户可以选择的模块列表。 当他单击“保存”时,代码需要遍历此CheckBoxList并“选择”已检查的CheckBox的值,而忽略那些未检查的值。

问题是,无论是否选中了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 :(得分:0)

当你在任何人都能猜到可行的解决方案之前找出你自己问题的解决方案时,这是非常糟糕的......

然而我修好了!

不需要在这里创建ModuleList,而是在.Click事件处理程序中创建。它也没有被其他程序所占用。在哪里使用

我刚宣布全局使用它。

我的监督不好。