Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 14

Discussione: goto catch

  1. #1
    Utente di HTML.it L'avatar di supermac
    Registrato dal
    Jun 2001
    Messaggi
    1,881

    goto catch

    C'è modo di genereare una exception volontariamente in modo da dirottare il codice nel blocco catch?
    Un comando tipo throw exception o simile? Gli faccio fare una divisione per 0?

    (in un blocco try devo inserire un record in una tabella ma prima di fare l'insert controllo se il record esiste già e, in quel caso, volevo saltare l'insert ed andare nel catch dove visualizzo un alert con register.clientscript + window.href su altra pagina)
    W la Ferari effetrenavenave!
    il computer è un somaro veloce! (neanche tanto ndr)

  2. #2
    Moderatore di Windows e software L'avatar di URANIO
    Registrato dal
    Dec 1999
    residenza
    Casalpusterlengo (LO)
    Messaggi
    1,290
    throw new exception("blabla")

  3. #3
    Utente di HTML.it L'avatar di supermac
    Registrato dal
    Jun 2001
    Messaggi
    1,881
    Quote Originariamente inviata da URANIO Visualizza il messaggio
    throw new exception("blabla")
    muy obrigado
    W la Ferari effetrenavenave!
    il computer è un somaro veloce! (neanche tanto ndr)

  4. #4
    Moderatore di ASP.net L'avatar di djciko
    Registrato dal
    Nov 2002
    Messaggi
    6,887
    quello che vuoi fare dovresti farlo nel try: se il record esiste fai la redirect, altrimenti fai l'insert.

    Non c'e' bisogno di generare l'eccezione e demandare la redirect al Catch

  5. #5
    Utente di HTML.it L'avatar di supermac
    Registrato dal
    Jun 2001
    Messaggi
    1,881
    In effetti neanche l'exception mi risolve... io non vorrei fare nessun redirect: se il record esiste vorrei mostrare un alert e bloccare l'Insert (o l'update)... Mi pare di capire che la via giusta sarebbe dichiarare la mia funzione codebehind come webmethod per usarla lato client e sto provando a leggere qualcosa a riguardo ma mi risulta piuttosto ostico...
    mainaggioia
    W la Ferari effetrenavenave!
    il computer è un somaro veloce! (neanche tanto ndr)

  6. #6
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    throw new exception("blabla") è utilissimo non foss'altro per debug.

    Per quanto riguarda l'uso dell'attributo webmethod, l'ho provato con jquery e senza jquery, ma non mi convince molto





    ps. in questo caso non userei il redirect ma, come suggerito, userei le eccezioni in modo da andare nel blocco Catch e mostrare al client un messaggio di avviso
    Ultima modifica di pietro09; 30-05-2016 a 16:58
    Pietro

  7. #7
    Utente di HTML.it L'avatar di supermac
    Registrato dal
    Jun 2001
    Messaggi
    1,881
    Quote Originariamente inviata da pietro09 Visualizza il messaggio

    ps. in questo caso non userei il redirect ma, come suggerito, userei le eccezioni in modo da andare nel blocco Catch e mostrare al client un messaggio di avviso
    Questa era l'idea, ma dopo aver mostrato il messaggio devo anche bloccare il comando insert/update con un e.cancel = true e qui s'infrangono i miei sogni di messaggi esplicativi all'utente (perchè sto facendo tutto ciò nell'iteminserting/itemupdating di un formview)
    W la Ferari effetrenavenave!
    il computer è un somaro veloce! (neanche tanto ndr)

  8. #8
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    non ho visto il tuo codice ma mi pare che la tua idea sia buona (forse perchè la uso anch'io )

    io metto tutto dentro il blocco Try-End Try
    uso una transazione.
    se tutto va bene, come ultima istruzione metto Transazione.Commit()
    se si verifica un errore, nel blocco Catch faccio il Rollback della transazione e mostro il messaggio all'utente
    Pietro

  9. #9
    Moderatore di ASP.net L'avatar di djciko
    Registrato dal
    Nov 2002
    Messaggi
    6,887
    ah ok sorry, la parola "dirottare" mi ha fatto pensare involontariamente ad una redirect.

    Oltre alla soluzione di cui sopra, PageMethods e' abbastanza semplice ma devi fare un po' di pratica: dopo aver indicato il metodo lato server come WebMethod, devi indicare nella chiamata:

    Parametri
    Metodo JS da eseguire se tutto ok
    Metodo JS da eseguire se viene sollevata una eccezione

    Credo sia meglio fare tutto nel TRY e deviare tramite un booleano o meglio ancora, con le transazioni come fa pietro. La tecnica dei PageMethods è fragile e poco manutenibile, a mio avviso.

    PS: Posta il codice
    Ultima modifica di djciko; 30-05-2016 a 20:46

  10. #10
    Utente di HTML.it L'avatar di supermac
    Registrato dal
    Jun 2001
    Messaggi
    1,881
    Quote Originariamente inviata da djciko Visualizza il messaggio
    Posta il codice
    codice:
    Protected Sub FormView1_Iteminserting(ByVal sender As Object, ByVal e As FormViewInsertEventArgs) Handles FormView1.ItemInserting
            Dim almes As String = "", strsql As String = ""
            If Page.IsValid Then
                Try
                    Dim cn = New SqlConnection(ConfigurationManager.ConnectionStrings("FLINK").ConnectionString)
                    Using cn
                        cn.Open()
                        'controllo che non ci sia già usern uguale in db
                        strsql = "SELECT op_ID FROM operatori WHERE usern=@usern"
                        Dim cmd = New SqlCommand(strsql, cn)
                        Dim usern As TextBox = FormView1.FindControl("textuser")
                        cmd.Parameters.AddWithValue("@usern", usern.Text)
                        Dim rs As SqlDataReader = cmd.ExecuteReader()
                        If rs.HasRows Then
                          'qui deve cancellare l'inserimento e mandare al catch exception dove fa comparire un alert 
                          'ma mi pare che l'e.cancel=true faccia anche uscire dalla sub (e quindi niente alert)
                        End If
    
                        'inserimento
                        strsql = "INSERT INTO operatori ........ "
                        Dim cmd = New SqlCommand(strsql, cn)
                        
                        cmd.ExecuteNonQuery()
    
                    End Using
                    almes = "alert('Credenziali corretamente inserite.');window.location.href = 'mypage.aspx';"
                    Page.ClientScript.RegisterClientScriptBlock(Me.GetType(), "MyScript", almes, True)
    
    
                Catch ex As Exception
                        almes = "alert('Username già in uso, scegline una diversa.');"
                        Page.ClientScript.RegisterClientScriptBlock(Me.GetType(), "MyScript", almes, True)
     
    
                End Try
            End If
        End Sub
    W la Ferari effetrenavenave!
    il computer è un somaro veloce! (neanche tanto ndr)

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.