2011-10-26 78 views
0

我有我的網站上用戶可以選擇的選項列表。我想要做的是提供功能來限制用戶基於他在CheckBoxList中的選擇獲得的內容量。 一旦他選擇了他想要的東西,他會點擊保存並將他的選擇寫入數據庫。 CheckBoxList最初從Modules表中填充。這提供了用戶可以選擇的模塊列表。 當他點擊保存時,代碼需要遍歷這個CheckBoxList並「挑選」CheckBox的值,而忽略那些沒有的值。獲取CheckBoxList中每個項目的Checked值

問題是,無論CheckBox是否被選中,調試器都會爲CheckBoxList.Items(i).Selected屬性返回一個False值。

這裏是我的代碼:

注:我知道這裏的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

誰曾告訴過你,你不應該關注SQL注入攻擊,這是錯誤的。 – Curt

+1

@Curt正確,但與我的情況無關。 – Ortund

回答

0

它是如此的糟糕,當你解決找出你自己的問題,任何人之前甚至可以在一個可行的修復猜...

不過我定了!

ModuleList不需要在這裏創建,而是在.Click事件處理程序中創建。它也沒有被其他程序繼續使用。它在哪裏被使用

我剛剛聲明它在全球範圍內使用它。

糟糕的監督不力。

相關問題