Cómo hacer que las casillas de verificación funcionen en ASP.NET
Pregunta
Estoy trabajando con una aplicación web antigua desarrollada en el marco VB.NET 1.1. Tengo un problema con las casillas de verificación.
Tengo el siguiente código para mi casilla de verificación:
<asp:TemplateColumn HeaderText="Reviewed">
<ItemStyle HorizontalAlign="Center" VerticalAlign="Middle" />
<ItemTemplate>
<asp:checkbox ID="chkAppRev" Runat="server"
OnCheckedChanged="onCheckChange" AutoPostBack="True" />
</ItemTemplate>
</asp:TemplateColumn>
y esto para mi evento 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
Todo esto funciona bien hasta que agrego otra casilla de verificación en el código asp y otro método oncheckchanged
, parece que simplemente omite la consulta.
¿Alguien tiene alguna idea de lo que me perdí?
Solución
Tienes un GRAN NO-NO en el código: está silenciosamente anulando una excepción y desechándola.
Hay algún tipo de excepción en algún lugar del método, pero a medida que descartas toda la información al respecto, no hay ningún indicio de qué es lo que no funciona. Es probable que algunas de las referencias sean nulas, pero sin ninguna información que le indique cuál es difícil de detectar el problema.
Elimine esta línea para que la excepción no se separe silenciosamente:
Catch ex As Exception
Alternativamente, coloca un código después de eso que realmente maneja la excepción. En ese caso, debe cambiar la línea para no capturar la clase base Exception
sino una clase de excepción más específica como SqlException
.
Con alguna información sobre dónde ocurre la excepción, es posible detectar el problema.
Otros consejos
¿Se aseguró de haber ingresado el Runat = " servidor " y AutoPostBack = " Verdadero " etiquetas?
Solo para estar seguro, ¿hay algún error tipográfico en su código en la pregunta?
oncheckchanged o oncheckchange
-
También a qué te refieres con " agrego otra casilla de verificación en el código asp y otro método oncheckchanged " ;? ¿Realmente creas otro manejador?