Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it L'avatar di dwb
    Registrato dal
    Mar 2001
    residenza
    My IDE! :)
    Messaggi
    2,908

    Object reference not set to an instance of an object.

    Ho letto e riletto il codice, ma non riesco ad individuare il problema!

    Ho una pagina dalla quale si selezionano degli elementi, dopodiché cliccando su Invia porta a Send.aspx, ovvero un modulo con alcuni dati da inserire per comporre una mail. Il Page Load è questo:

    codice:
            protected void Page_Load(object sender, EventArgs e)
            {
    
    
                //Recupero superficie selezionata
                string superficieSelezionata = Request.Form["Superficie"].ToString();
                string superficieRimpiazzata = superficieSelezionata.Replace("_", " ");
                Session["recuperoSuperficie"] = superficieRimpiazzata;
                lblSuperficie.Text = Session["recuperoSuperficie"].ToString();
    
    
    
    
    
    
                //Recupero finestra selezionata
                string finestraSelezionata = Request.Form["Finestre"].ToString();
                string finestraRimpiazzata = finestraSelezionata.Replace("_", " ");
                Session["recuperoFinestre"] = finestraRimpiazzata;
                lblFinestre.Text = Session["recuperoFinestre"].ToString();
    
    
    
    
                //Recupero griglia selezionata
                string grigliaSelezionata = Request.Form["Griglia"].ToString();
                string grigliaRimpiazzata = grigliaSelezionata.Replace("_", " ");
                Session["recuperoGriglie"] = grigliaRimpiazzata;
                lblGriglie.Text = Session["recuperoGriglie"].ToString();
    
    
            }
    Al click sul pulsante, invia, viene invocato il seguente metodo:

    codice:
            protected void btnSend_Click2(object sender, EventArgs e)
            {
               
                    string nome = fname.Value.ToString();
                    string cognome = lname.Value.ToString();
                    string città = fcity.Value.ToString();
                    string mail = email.Value.ToString();
                    string telefono = phone.Value.ToString();
                    string larghezza = l.Value.ToString();
                    string altezza = h.Value.ToString();
                    string commenti = comment.Value.ToString();
                //string installationType = Request.Form["instType"].ToString();
                //string statoConsenso = Consenso.SelectedValue.ToString();
    
    
                    string checkConsenso = Consenso.SelectedValue;
    
    
                    if (checkConsenso == "KO")
                    {
                        lblStatus.Text = "NON E' POSSIBILE PROCEDERE SENZA L'AUTORIZZAZIONE AL TRATTAMENTO DEI DATI";
                    }
                    else
                    {
    
    
                        MailMessage message = new MailMessage();
                        message.To.Add("xxxxxxx@tiscali.it");
                        message.From = new System.Net.Mail.MailAddress("sales@xxxxxx.com");
                        message.Subject = "Richiesta preventivo da " + nome + " " + cognome;
                        message.Body = "Dettagli richiesta preventivo: " + "<br>" + "<b>NOME: </b> " + nome + "<BR>" + "<b>COGNOME: </b> " + cognome + "<BR>" + "<b>CITTA': </b>" + città + "<BR>" + "<b>E-MAIL:</b> " + mail + "<BR>" + "<B>TELEFONO: </B>" + telefono + "<BR>" + "<B>LARGHEZZA:</b> " + larghezza + "<BR>" + "<B>ALTEZZA: </B>" + altezza + "<BR>" + "<b>COMMENTI:</b> " + commenti + "<BR>" + "<B>PRODOTTO:</B> ";
    
    
                        //message.Attachments.Add(new 
                        SmtpClient smtp = new SmtpClient("localhost");
                        message.IsBodyHtml = true;
                        smtp.Send(message);
                        lblStatus.Text = "La richiesta è stata correttamente inviata.";
                        btnSend.Enabled = false;
                    }
    
    
                }
    Purtroppo continua a dare l'errore:

    Object reference not set to an instance of an object.

    StackTrace:


    Stack Trace:

    [NullReferenceException: Object reference not set to an instance of an object.]
    OltreLuce.Send.Page_Load(Object sender, EventArgs e) +41
    System.Web.Util.CalliEventHandlerDelegateProxy.Cal lback(Object sender, EventArgs e) +51
    System.Web.UI.Control.OnLoad(EventArgs e) +95
    System.Web.UI.Control.LoadRecursive() +59
    System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +678
    Ultima modifica di djciko; 24-10-2019 a 01:21
    ~Il nome di una variabile deve riflettere il suo scopo e non il suo tipo di dati, NET Framework.

  2. #2
    Moderatore di Windows e software L'avatar di URANIO
    Registrato dal
    Dec 1999
    residenza
    Casalpusterlengo (LO)
    Messaggi
    1,290
    L'eccezione ha origine in Page_Load
    Il problema è che stai cercando ad accedere ad un oggetto che non è mai stato instazionato

    Molto probabilmente una delle
    Request.form[""] non è passata.

    Mettiti in break nella funzione e debug-ga.

  3. #3
    Moderatore di ASP.net L'avatar di djciko
    Registrato dal
    Nov 2002
    Messaggi
    6,887
    (PS: ho oscurato gli indirizzi email che avevi riportato dal codice)


    Riguardo l'errore, il metodo .ToString() è pericoloso, si deve sempre controllare se l'oggetto su cui si applica è null. E' sicuramente un dato scritto male in partenza (es. "finestra" invece di "finestre").

    Ci dovrebbero essere piu' controlli nel codice ed almeno un try-catch all'invio della mail..

    ---
    piccola nota:
    in C# (dalla v.8, mi pare) c'è ora la feature di null-coalescing, finalmente, senza controllare tutto con una sbrodolata di If.

    in pratica (assegnazione):
    codice:
    if (variable is null)
    {
        variable = expression;
    }

    si puo' sostituire con:
    codice:
    variable ??= expression;


    altro esempio (valore restituito) :
    codice:
    int? a = null;
    int b = a ?? -1;
    Console.WriteLine(b);  // output: -1

    praticamente hanno implementato la funzione ISNULL di T-Sql anche in C#, ed era ora.

    (fonte: https://docs.microsoft.com/it-it/dot...scing-operator)
    Ultima modifica di djciko; 24-10-2019 a 01:19

  4. #4
    Utente di HTML.it L'avatar di dwb
    Registrato dal
    Mar 2001
    residenza
    My IDE! :)
    Messaggi
    2,908
    Grazie mille ragazzi.
    ~Il nome di una variabile deve riflettere il suo scopo e non il suo tipo di dati, NET Framework.

  5. #5

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.