Object reference not set to an instance of an object

venerdì 24 febbraio 2006 - 18.29

cnnmax Profilo | Junior Member

Ciao a tutti.
Mi aiutate a capire il problema di questo messaggio?

"Object reference not set to an instance of an object"

Compare in modo molto random agli utenti di un applicazione asp.net

Sviluppo in vb.net con framework 1.1
l'applicazione gira su un server 2003.

Utilizzo una serie di controlli creati ad hoc ma tutti ereditati da controlli standard.

Ho letto in internet che ci sono alcuni bug a riguardo ma non sono riuscito a trovarne uno che mi risolvesse il problema.

Ciao e grazie a tutti

Brainkiller Profilo | Guru

>Ciao a tutti.
>Mi aiutate a capire il problema di questo messaggio?
>"Object reference not set to an instance of an object"
>>Ho letto in internet che ci sono alcuni bug a riguardo ma non
>sono riuscito a trovarne uno che mi risolvesse il problema.
>Compare in modo molto random agli utenti di un applicazione asp.net

Ciao,
qui più che altro sembra che sia bacata l'applicazione che hai scritto tu.
Semplicemente stai andando ad utilizzare un oggetto non istanziato. Da qui, la Exception di cui all'oggetto. Ti consiglio di eseguire più sessioni di debug sul codice dell'applicazione e cercare di identificare il punto in cui viene usato un oggetto non istanziato.

Non credo proprio siano bachi del .NET Framework se no se ne sarebbero accorti già un po' tutti.

Ciao
David De Giacomi
Microsoft MVP
http://blogs.dotnethell.it/david/

cnnmax Profilo | Junior Member

Il problema è che l'errore è random, quindi mi risulta molto difficile identificare dove sta il problema, per questo chiedevo se c'era qualche problema noto.

Questa è la dichiarazione che uso quando istanzio un oggetto:

Dim oCtlChild As Control
Dim cPage As Page = CType(HttpContext.Current.Handler, Page)

oCtlChild = cPage.FindControl(oCtl)

Dim oDDL As pcDropDownList = New pcDropDownList
Try
oDDL = CType(oCtlChild, pcDropDownList)
....

Catch ex As Exception
throw new exception(ex.message)
Finally
oDDL = Nothing
End Try

sbaglio in qualcosa?
Grazie

Brainkiller Profilo | Guru

Questa riga è la prima volat che la vedo:

Dim cPage As Page = CType(HttpContext.Current.Handler, Page)

Sicuro che ti restituisce l'oggetto Pagina ?
Dove stai usando questo codice in un HttpModule o in una pagina normale ?

Ciao
David De Giacomi
Microsoft MVP
http://blogs.dotnethell.it/david/

cnnmax Profilo | Junior Member

Si restituisce 'oggetto pagina se logicamente la richiesta è una pagina

Il codice è usato in una classe separata ed istanziata nella modulo della pagina
la uso per trovare i controlli sulla pagina ed associare o leggere i valori memorizzati

Questo è il risultato in debug
?HttpContext.Current.Handler
{ASP.Anagrafica_aspx}
[ASP.Anagrafica_aspx]: {ASP.Anagrafica_aspx}
IsReusable: False

dopo l'associazione ed il cast:

?cPage
{ASP.Anagrafica_aspx}
[ASP.Anagrafica_aspx]: {ASP.Anagrafica_aspx}
Application: {System.Web.HttpApplicationState}
BindingContainer: <error: an exception of type: {System.NullReferenceException} occurred>
Cache: {System.Web.Caching.Cache}
ClientID: Nothing
ClientTarget: ""
Controls: {System.Web.UI.ControlCollection}
EnableViewState: True
ErrorPage: Nothing
ID: Nothing
IsPostBack: True
IsReusable: False
IsValid: <error: an exception of type: {System.Web.HttpException} occurred>
NamingContainer: Nothing
Page: {ASP.Anagrafica_aspx}
Parent: Nothing
Request: {System.Web.HttpRequest}
Response: {System.Web.HttpResponse}
Server: {System.Web.HttpServerUtility}
Session: {System.Web.SessionState.HttpSessionState}
Site: Nothing
SmartNavigation: False
TemplateSourceDirectory: "/MyApp"
Trace: {System.Web.TraceContext}
UniqueID: Nothing
User: {System.Security.Principal.GenericPrincipal}
Validators: {System.Web.UI.ValidatorCollection}
ViewStateUserKey: Nothing
Visible: True

Questo è invece il risultato di uno dei controlli che poi vado ad associare:

?oCtlChild
{myControls.WebControls.vb.pcDropDownList}
[myControls.WebControls.vb.pcDropDownList]: {myControls.WebControls.vb.pcDropDownList}
BindingContainer: {ASP.Anagrafica_aspx}
ClientID: "pcDDLTransazione"
Controls: {System.Web.UI.EmptyControlCollection}
EnableViewState: True
ID: "pcDDLTransazione"
NamingContainer: {ASP.Anagrafica_aspx}
Page: {ASP.Anagrafica_aspx}
Parent: {System.Web.UI.HtmlControls.HtmlForm}
Site: Nothing
TemplateSourceDirectory: "/MyApp"
UniqueID: "pcDDLTransazione"
Visible: True

Controllo che tipo oggetto è:

If TypeName(oCtlChild)= "pcDropDownList" Then
Dim oDDL As pcDropDownList = New pcDropDownList
Try
oDDL = CType(oCtlChild, pcDropDownList)
cDataField = oDDL.DataField ' Contiene il nome del campo di DB
....
oDDL.SelectedValue = oRow.Item(cDataField)
....

Il fatto strano è che la maschera funziona. a me non ha mai dato problemi.
Solo che agli utenti dell'applicazione ogni tanto da errore e se ricaricano la pagina e modificano nuovamente lo stesso valore funziona.

Non riesco ad isolare il probelma, sto inserendo una serie di controlli per restringere il campo e cercare di capire cosa va in errore e dove sto sbagliando.

Avete suggerimenti?
Grazie




Luigi3 Profilo | Junior Member

Ho lo stesso problema anche io e il brutto è proprio la casualità dell'errore. A me l'applicazione ha funzionato bene x 4 giorni consecutivi ma poi è arrivato questo errore.
Come si puo' capire perche' viene lanciato? Io ho dei thread che scrivono su una listbox, sempre nella posizione 0 della list box in modo da far apparire il messaggio sempre in testa. Cosa devo controllare secondo voi?

Brainkiller Profilo | Guru

>Ho lo stesso problema anche io e il brutto è proprio la casualità
>dell'errore. A me l'applicazione ha funzionato bene x 4 giorni
>consecutivi ma poi è arrivato questo errore.
>Come si puo' capire perche' viene lanciato? Io ho dei thread
>che scrivono su una listbox, sempre nella posizione 0 della list
>box in modo da far apparire il messaggio sempre in testa. Cosa
>devo controllare secondo voi?

Ciao Luigi,
bisogna fare debug. Se poi fai programmazione Multithreading bisogna stare molto attenti a quello che si fa ed usare gli oggetti per la sincronizzazione. Diversamente si va incontro a gravi problemi tra cui probabilmente il tuo.

Ciao

David De Giacomi
Microsoft MVP
http://blogs.dotnethell.it/david/
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5