【问题标题】:How to get checkboxes to work in ASP.NET如何让复选框在 ASP.NET 中工作
【发布时间】:2009-05-01 11:36:45
【问题描述】:

我正在使用在 VB.NET 1.1 框架中开发的旧 Web 应用程序。我遇到了复选框问题。

我的复选框有以下代码:

<asp:TemplateColumn HeaderText="Reviewed">
<ItemStyle HorizontalAlign="Center" VerticalAlign="Middle" />
<ItemTemplate>
<asp:checkbox ID="chkAppRev" Runat="server" 
    OnCheckedChanged="onCheckChange" AutoPostBack="True" />  
</ItemTemplate>
</asp:TemplateColumn>

这是我的OnCheckChanged 活动:

Public Sub onCheckChange(ByVal sender As Object, ByVal e As EventArgs)
    Dim strSQL As String = String.Empty
    Dim inbox As CheckBox = CType(sender, CheckBox)
    Dim dgItem As DataGridItem = CType(inbox.NamingContainer, DataGridItem)
    Dim conn As OleDb.OleDbConnection = New OleDb.OleDbConnection(ConfigurationSettings.AppSettings("CONNECTIONSTRING"))
    Try
        '--update checkbox field on record in database
        conn.Open()
        If inbox.Checked = True Then
            strSQL = "Update AppUserJobs Set AppChecked=1 " & _
            "Where AppUserId=" & Convert.ToInt32(dgItem.Cells(9).Text) & 
 " and JobId=" & Convert.ToInt32(dgItem.Cells(10).Text)



        Else
            strSQL = "Update AppUser Set AppChecked=0 " & _
            "Where AppUserId=" & Convert.ToInt32(dgItem.Cells(9).Text) & 
" and JobId=" & Convert.ToInt32(dgItem.Cells(10).Text)
        End If

        Dim cmd As OleDb.OleDbCommand = New OleDb.OleDbCommand(strSQL, conn)
        Dim intRec As Integer = cmd.ExecuteNonQuery()
        conn.Close()
    Catch ex As Exception
    Finally
        If (conn.State = ConnectionState.Open) Then
            conn.Close()
        End If
    End Try
    BindData()
End Sub

这一切正常,直到我在 asp 代码中添加另一个复选框和另一个 oncheckchanged 方法,它似乎只是跳过了查询。

有人知道我错过了什么吗?

【问题讨论】:

  • 我们如何通过在问题出现之前查看代码来发现问题?发布更改后的代码。
  • Hello Guffa 谢谢,由于字符限制,我无法再发布代码了,但我只是用不同的 ID 复制了复选框代码,这会破坏代码,因为它会跳过 OnCheckChanged 方法中的查询
  • @Deviant:由于这些值被转换为整数,因此实际上可以避免 SQL 注入。不过,参数化的解决方案会更好。

标签: asp.net vb.net checkbox


【解决方案1】:

您在代码中有一个很大的禁忌:它默默地捕获异常并将其丢弃。

该方法的某处存在某种异常,但是当您丢弃有关它的所有信息时,并没有提示是什么出错了。可能是一些引用为空,但没有任何信息告诉您是哪一个,很难发现问题。

删除这一行,这样异常就不会被默默地掩埋:

Catch ex As Exception

或者在它之后放置一些实际处理异常的代码。在这种情况下,您应该更改该行,以便您不会捕获基类 Exception,而是捕获一些更具体的异常类,例如 SqlException

有了一些关于异常发生位置的信息,就有可能发现问题。

【讨论】:

    【解决方案2】:

    您是否确保输入了 Runat="server" 和 AutoPostBack="True" 标签?

    【讨论】:

      【解决方案3】:

      为了确定,您的代码中是否有错字?

      oncheckchangedoncheckchange

      --

      “我在 asp 代码中添加另一个复选框和另一个 oncheckchanged 方法”是什么意思?你真的创建了另一个处理程序吗?

      【讨论】:

        猜你喜欢
        • 2017-12-17
        • 2015-08-05
        • 1970-01-01
        • 1970-01-01
        • 2013-10-14
        • 2013-06-01
        • 1970-01-01
        • 1970-01-01
        • 2017-09-10
        相关资源
        最近更新 更多