Come fare in modo che le caselle di controllo funzionino in ASP.NET
Domanda
Sto lavorando con una vecchia applicazione web sviluppata nel framework VB.NET 1.1. Sto riscontrando un problema con le caselle di controllo.
Ho il seguente codice per la mia casella di controllo:
<asp:TemplateColumn HeaderText="Reviewed">
<ItemStyle HorizontalAlign="Center" VerticalAlign="Middle" />
<ItemTemplate>
<asp:checkbox ID="chkAppRev" Runat="server"
OnCheckedChanged="onCheckChange" AutoPostBack="True" />
</ItemTemplate>
</asp:TemplateColumn>
e questo per il mio 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
Tutto funziona benissimo finché non aggiungo un'altra casella di controllo nel codice asp e un altro metodo oncheckchanged
, sembra che salti semplicemente la query.
Qualcuno ha qualche idea di cosa mi sono perso?
Soluzione
Hai un GRANDE NO-NO nel codice: sta silenziosamente catturando un'eccezione e gettandola via.
Esiste una sorta di eccezione da qualche parte nel metodo, ma quando si eliminano tutte le informazioni a riguardo, non vi è alcun indizio su cosa vada storto. Probabilmente sono alcuni dei riferimenti che sono nulli, ma senza alcuna informazione che ti dica quale, è difficile individuare il problema.
Rimuovi questa riga in modo che l'eccezione non venga sepolta silenziosamente:
Catch ex As Exception
In alternativa, inserisci del codice dopo di esso che gestisce effettivamente l'eccezione. In tal caso dovresti cambiare la linea in modo da non catturare la classe base Exception
ma alcune classi di eccezione più specifiche come SqlException
.
Con alcune informazioni su dove si verifica l'eccezione, è possibile individuare il problema.
Altri suggerimenti
Ti sei assicurato di aver inserito Runat = " server " e AutoPostBack = " True " tag?
Solo per essere sicuri, c'è un errore di battitura nel tuo codice solo nella domanda?
oncheckchanged o oncheckchange
-
Che cosa intendi con " aggiungo un'altra casella di controllo nel codice asp e un altro metodo con segno di spunta " ;? In realtà crei un altro gestore?