Principale utente con più risposte
[.net 2.0 - c#] Eccezioni non gestite nella details view

Domanda
-
Ciao ragazzi,
ho un problema di cui non riesco a venire a capo. Ho inserito all'interno della mia pagina aspx un controllo details view in accoppiata con un sql source per effettuare l'inserimento su una tabella.
Funziona regolarmente se inserisco i dati giusti ma, se sbaglio ad inserirli, ad esempio li lascio vuoti, mi genera un'eccezione non gestita. Ho provato ad intercettarla in questo modo
void DetailsView1_OnItemInserting(DetailsViewInsertedEventArgs e) { if (e.Exception != null) { Label1.Text = e.Exception.Message; e.ExceptionHandled = true; e.KeepInInsertMode = true; } }
ma non funziona.
Noto che nell'elenco degli oggetti, il menu a tendina le file .cs, non mi compare la details view.
C'è un modo per intercettare l'eccezione?
Grazie in anticipo
Risposte
-
Prova ad intercetterare l'evento ItemInserted:
http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.detailsviewinsertedeventargs.exception.aspx
Matteo Migliore
Bloghttp://blogs.ugidotnet.org/matteomigliore
Twitterhttp://twitter.com/matteomigliore
CodePlex- Proposto come risposta Carmine Punella giovedì 27 ottobre 2011 09:12
- Contrassegnato come risposta ciro.net giovedì 27 ottobre 2011 20:26
-
L'evento che devi intercettare è ItemInserted, non ItemInserting.
E non hai postato lo stack trace, cioè la lista delle chiamate che vengono eseguite prima che si verifichi l'eccezione.
Matteo Migliore
Bloghttp://blogs.ugidotnet.org/matteomigliore
Twitterhttp://twitter.com/matteomigliore
CodePlex- Contrassegnato come risposta ciro.net giovedì 27 ottobre 2011 20:26
Tutte le risposte
-
Prova ad intercetterare l'evento ItemInserted:
http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.detailsviewinsertedeventargs.exception.aspx
Matteo Migliore
Bloghttp://blogs.ugidotnet.org/matteomigliore
Twitterhttp://twitter.com/matteomigliore
CodePlex- Proposto come risposta Carmine Punella giovedì 27 ottobre 2011 09:12
- Contrassegnato come risposta ciro.net giovedì 27 ottobre 2011 20:26
-
-
Prova a postare lo stack trace dell'exception, vediamo dove si verifica.
Matteo Migliore
Bloghttp://blogs.ugidotnet.org/matteomigliore
Twitterhttp://twitter.com/matteomigliore
CodePlex -
ciao matteo,
sono riuscito a fare qualcosa ma ho ancora problemi
allora ti posto i pezzi di codice che uso
<asp:DetailsView ID="DetailsView1" EmptyDataText="No records." runat="server" AutoGenerateRows="False" DataKeyNames="ID_USER" DataSourceID="SqlDataSource1" DefaultMode="Insert" EnableModelValidation="True" Height="50px" Width="125px" OnItemInserting="DetailsView1_ItemInserting"> <Fields> <asp:BoundField DataField="USERNAME" HeaderText="USERNAME" SortExpression="USERNAME" /> <asp:BoundField DataField="PASSWORD" HeaderText="PASSWORD" SortExpression="PASSWORD" /> <asp:CommandField ShowInsertButton="True" ButtonType="Button" /> </Fields> </asp:DetailsView>
<br/>
<script runat="server"> void DetailsView1_ItemInserting(Object sender, DetailsViewInsertedEventArgs e) { // Use the Exception property to determine whether an exception // occurred during the insert operation. if (e.Exception == null && e.AffectedRows == 1) { // Use the Values property to get the value entered by // the user for the CompanyName field. String name = e.Values["CompanyName"].ToString(); // Display a confirmation message. //Label1.Text = name + " added successfully. "; } else { // Insert the code to handle the exception. // Label1.Text = e.Exception.Message; // Use the ExceptionHandled property to indicate that the // exception is already handled. e.ExceptionHandled = true; // When an exception occurs, keep the DetailsView // control in insert mode. e.KeepInInsertMode = true; } } </script>
Descrizione: Errore durante la compilazione di una risorsa necessaria per soddisfare la richiesta. Rivedere i dettagli relativi all'errore e modificare in modo appropriato il codice sorgente.
Messaggio di errore del compilatore: CS0123: Nessun overload di 'DetailsView1_ItemInserting' corrisponde al delegato 'System.Web.UI.WebControls.DetailsViewInsertEventHandler'.
Errore nel codice sorgente:
Riga 121: Riga 122: <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label> Riga 123: <asp:DetailsView ID="DetailsView1" EmptyDataText="No records." runat="server" AutoGenerateRows="False" DataKeyNames="ID_USER" Riga 124: DataSourceID="SqlDataSource1" DefaultMode="Insert" EnableModelValidation="True" Riga 125: Height="50px" Width="125px" OnItemInserting="DetailsView1_ItemInserting">
-
L'evento che devi intercettare è ItemInserted, non ItemInserting.
E non hai postato lo stack trace, cioè la lista delle chiamate che vengono eseguite prima che si verifichi l'eccezione.
Matteo Migliore
Bloghttp://blogs.ugidotnet.org/matteomigliore
Twitterhttp://twitter.com/matteomigliore
CodePlex- Contrassegnato come risposta ciro.net giovedì 27 ottobre 2011 20:26
-
ok Matteo,
grazie alle tue indicazioni sono riuscito ad intercettare. Ho solo un'ultima domanda
Nella pagina ho il seguente codice
<asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>
Non riesco a referenziarmi a label1 all'interno del controllo dell'eccezione. Quindi nel metodoDetailsView1_ItemInserted
nello stesso file aspx e ovviamente tra i tag script
Se uso
Label1.Text = name + " added successfully. ";
mi dice che non esiste nel contesto corrente. Mi sembra anche giusto visto che non la definisco. Ma come faccio a riferirmi alla label presente nella pagina?
-
Uhm, prova a cancellare le directory bin e obj del progetto ASP.NET e quindi ricompilare con "Rebuild Solution".
Matteo Migliore
Bloghttp://blogs.ugidotnet.org/matteomigliore
Twitterhttp://twitter.com/matteomigliore
CodePlex -