Click here to Skip to main content
15,898,035 members
Please Sign up or sign in to vote.
0.00/5 (No votes)
See more:
I have a problem in determining what causes an 'object reference not set to an instance of an object' error when I try to load a page in asp.net our web application server, but the same code runs fine when I run it in the IDE (Microsoft Visual Web Developer 2010 Express).
Here is an extract from the aspx
   <div id="div1"
   style="border: thin none #000000; font-family: Arial, Helvetica, sans-serif; font-weight: bold; font-size: inherit; font-style: normal; color: #000000;">

       <asp:Label ID="lblSN" runat="server" Text="Serial Number:" Height="22px" ></asp:Label> <br />
       <asp:Label ID="lblFamDesc" runat="server" Text="Family Description:" Height="22px" ></asp:Label> <br />
       <asp:Label ID="lblCusNam" runat="server"  Text="Select Customer Name:" Height="22px"></asp:Label> <br />
       <asp:Label ID="lblWONumber" runat="server" Text="Works Order Number:" Height="22px"></asp:Label> <br />
       <asp:Label ID="lblSONumber" runat="server" Text="Sales Order Number:" Height="22px"></asp:Label> <br />
       <asp:Label ID="lblCusCod" runat="server" Text="Customer Code:" Height="22px"></asp:Label> <br />
       <asp:Label ID="lblModelNo" runat="server" Text="Model Number:" Height="22px"></asp:Label> <br />
       <asp:Label ID="lblCaldBy" runat="server" Text="Calibrator's Name:" Height="22px"></asp:Label> <br />
       <asp:Label ID="lblStartDatePrompt" runat="server" Text="From: "></asp:Label>
       <asp:Label ID="lblStartDateValue" runat="server" Height="22px"></asp:Label> <br />
       <asp:Label ID="lblEndDatePrompt" runat="server" Text="To: "></asp:Label>
       <asp:Label ID="Label8" runat="server" Height="22px" Width="78px"></asp:Label>

       <asp:Button ID="btnRefresh" runat="server" Text="Refresh" />
    </div>

<div id="divStatus" style="background-color: #FFFBF0;">

    <asp:Label ID="lblStatus" runat="server" Visible="False" Height="54px"
         Font-Bold="True" ForeColor="Red" Width="380px"></asp:Label>
 </div>


VB
Private Sub Page_PreRender(sender As Object, e As System.EventArgs) Handles Me.PreRender



       ' to prevent the list being populated multiple times on page refreshes.
       If Not Page.IsPostBack Then


           Dim yr As Integer
           Dim strYear As String
           Dim TodaysDate As Date

           TodaysDate = New Date
           TodaysDate = Today


           'lblCurrentDate.Text = DateTime.Now.ToString("dd-MM-yyyy")


           ' Assign a default Start Date
           If lblStartDateValue.Text = "" Then
               DateStart.SelectedDate = "2009-11-30"
               lblStartDateValue.Text = "30/11/2009"
           End If

           Try
               ' Assign a default End Date
               If Me.Label8.Text = "" Then
                   Me.Label8.Text = DateTime.Now.ToString("dd/MM/yyyy")
                   DateEnd.SelectedDate = Today
               End If
           Catch Excptn As Exception
               Me.lblStatus.Visible = True
               Me.lblStatus.Text = "Stack Trace: " & vbCrLf & Excptn.StackTrace
           End Try
           DropDownListFamilyDesc.Items.Clear()
           DropDownListFamilyDesc.Items.Insert(0, "ANY")

           ' Populate the Family Description Drop Down List manually (so that the ANY item is followed by the list of valid Families).
           Dim con As New SqlConnection(WebConfigurationManager.ConnectionStrings("Norbar_ProductionConnectionString").ConnectionString)
           Dim cmd As New SqlCommand("SELECT [Family_Description], [FamilyID] FROM [vwFamily] ORDER BY [Family_Description], [FamilyID]", con)

           Using con
               con.Open()
               Dim reader As SqlDataReader = cmd.ExecuteReader()
               While reader.Read()
                   DropDownListFamilyDesc.Items.Add(CType(reader("Family_Description"), String))
               End While
           End Using

           If DropDownListStartYear.Items.Count = 0 Then
               strYear = Date.Parse(Today).ToString("yyyy")
               yr = strYear
               For theYear As Integer = yr To 2009 Step -1
                   DropDownListStartYear.Items.Add(theYear.ToString)
               Next
           End If

           If DropDownListEndYear.Items.Count = 0 Then
               strYear = Date.Parse(Today).ToString("yyyy")
               yr = strYear
               For theYear As Integer = yr To 2009 Step -1
                   DropDownListEndYear.Items.Add(theYear.ToString)
               Next
           End If

       End If
   End Sub

The page throws the error on the line
"Me.lblStatus.Visible = True".

Note that lblStartDateValue.Text is set ok in the lines before the one that errors, and as far as I can see it is set up in much the same way. Also the dropdown list works fine in the IDE (I don't know about on the application server because the page never gets rendered.)

This code works fine when ran in my IDE but only throws the error when run on a web application server. Does anyone have any suggestions? (Also. How should I output the error once it has been trapped?)
Posted
Updated 13-Aug-13 4:45am
v3
Comments
[no name] 12-Aug-13 11:39am    
The first obvious question is, what is "Today"?

1 solution

Either Today or lblCurrentDate is null, check it up. You can do it under the debugger.

This is one of the very easiest cases to detect and fix, so, instead of asking similar questions over and over, you rather need to develop an elementary skills of dealing with such situations.

It simply means that some member/variable of some reference type is dereferenced by using and of its instance (non-static) members, which requires this member/variable to be non-null, but in fact it appears to be null. Simply execute it under debugger, it will stop the execution where the exception is thrown. Put a break point on that line, restart the application and come to this point again. Evaluate all references involved in next line and see which one is null while it needs to be not null. After you figure this out, fix the code: either make sure the member/variable is properly initialized to a non-null reference, or check it for null and, in case of null, do something else.

Please see also: want to display next record on button click. but got an error in if condition of next record function "object reference not set to an instance of an object"[^].

Sometimes, you cannot do it under debugger, by one or another reason. One really nasty case is when the problem is only manifested if software is built when debug information is not available. In this case, you have to use the harder way. First, you need to make sure that you never block propagation of exceptions by handling them silently (this is a crime of developers against themselves, yet very usual). The you need to catch absolutely all exceptions on the very top stack frame of each thread. You can do it if you handle the exceptions of the type System.Exception. In the handler, you need to log all the exception information, especially the System.Exception.StackTrace:
http://msdn.microsoft.com/en-us/library/system.exception.aspx[^],
http://msdn.microsoft.com/en-us/library/system.exception.stacktrace.aspx[^].

The stack trace is just a string showing the full path of exception propagation from the throw statement to the handler. By reading it, you can always find ends. For logging, it's the best (in most cases) to use the class System.Diagnostics.EventLog:
http://msdn.microsoft.com/en-us/library/system.diagnostics.eventlog.aspx[^].

Good luck,
—SA
 
Share this answer
 
Comments
Thanks7872 12-Aug-13 12:36pm    
As usual....Sergey rocks..!!!!! Upvoted.
I especially like the way you explained it very concisely..! Excellent..!
Sergey Alexandrovich Kryukov 12-Aug-13 12:47pm    
Thank you very much, Rohan.
—SA
Herbisaurus 13-Aug-13 2:27am    
*****
Sergey Alexandrovich Kryukov 13-Aug-13 2:31am    
Thank you.
—SA
mlesniak 13-Aug-13 6:41am    
Thank you for your answer but I am still having difficulty. The object Today was not null, so that was ok. I don't know why the object lblCurrentDate was null because I created it using the IDE. I only created it to test my current date code. I now have a label that is the 12th of 12 labels which still errors, even though I was able to run it ok in the IDE. I had a similar label that I was able to assign static text to with no problem. I have renamed my label to Label8 in case the name was an issue but the problem persists. I don't know what I would need to do to instantiate a label or to make it accessible from the code behind page's Pre Render method.

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900