【问题标题】:CheckBoxList.Selected keeps coming back with False valueCheckBoxList.Selected 不断返回 False 值
【发布时间】:2012-06-13 11:50:53
【问题描述】:

我的页面上有一个 CheckBoxList 表现不佳。

这个想法是,一旦单击表单上的提交按钮,应用程序应该清除与特定用户相关的所有行的数据库表,然后根据用户的 CheckBoxList 选择重新插入新行。

问题在于,无论 CheckBoxList 中的任何(或所有)项目是否被选中,应用程序都会不断收到Selected = False

这是我的代码:

Protected Sub Page_Load(sender As Object, e As System.EventArgs) Handles Me.Load

    loadRegions()
End Sub

Private Sub loadRegions()

    Dim db As New Database

    Dim sql As String = "select * from regions"

    Dim dr As MySqlDataReader = db.execDB(sql, "Text", Nothing, "DataReader", False)

    If dr.HasRows Then

        cblRegion.DataSource = dr
        cblRegion.DataTextField = "regionname"
        cblRegion.DataValueField = "regionid"
        cblRegion.DataBind()
    End If

    dr.Close()
End Sub

Protected Sub btnRegister_Click(sender As Object, e As System.EventArgs) Handles btnRegister.Click
        ' ============================================================
        ' There's more code in here, but it's irrelevant to this paste
        ' ============================================================

        Dim sql As String = "delete from userregions where userid = " & lblUserID.Text & ";"

        For i As Integer = 0 To cblRegion.Items.Count - 1
            If cblRegion.Items(i).Selected Then
                sql &= "insert into userregions (userid, regionid)" & _
                    "values(" & UserID & ", " & cblRegion.Items(i).Value & ")"

                db.execDB(sql, "Text", Nothing, "None", False)
            End If
        Next
End Sub

记录在案
我知道这里有 SQL 注入的潜力。一旦循环工作,我将继续使用参数。

感谢您的宝贵时间。 任何帮助将不胜感激。

【问题讨论】:

    标签: asp.net vb.net checkboxlist


    【解决方案1】:

    您只需要在初始加载时调用loadRegions,而不是在回发时:

    Protected Sub Page_Load(sender As Object, e As System.EventArgs) Handles Me.Load
        If Not Page.IsPostBack Then
            loadRegions()
        End If
    End Sub
    

    否则您将丢失更改的值并且不会触发事件。

    【讨论】:

    • 哦,看在上帝的份上...我已经盯着这个看了将近一个小时,从来没有检查过...谢谢!
    【解决方案2】:

    在 Page_Load 方法中添加这行 copde "If IsPostBack Then Return"。

    Protected Sub Page_Load(sender As Object, e As System.EventArgs) Handles Me.Load
        If IsPostBack Then Return
        loadRegions()
    End Sub
    

    【讨论】:

    • 我对这个答案的简单性感到相当尴尬......事实上,我什至从未想过数据绑定应该在回发中......我猜我的大脑决定我可以跳过那个步骤
    • 当我们开始在 .Net 中编写代码时,也发生了很多事情。我无法弄清楚数据何时总是以第一个值或默认值存储。
    【解决方案3】:

    在加载的页面中,编写以下内容:

    If Not IsPostBack
        loadRegions()
    End If
    

    【讨论】:

      猜你喜欢
      • 2015-07-24
      • 1970-01-01
      • 2022-01-24
      • 2021-02-13
      • 2022-12-16
      • 2015-06-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多