开发者

Can not upload photos: NullReferenceException [duplicate]

This question already has answers here: What is a NullReferenceException, and how do I fix it? (27 answers) Closed 8 years ago.

Hello everyone I've been struggling with this error message for days:

Here is the error message:

Object reference not set to an instance of an object. 
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. 

Exception Details: System.NullReferenceException: Object reference not set to an instance of an object.

Source Error: 

Line 7:  
Line 8:      Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Line 9:          UserIdValue.Text = Membership.GetUser().ProviderUserKey.ToString()
Line 10:         cannotUploadImageMessage.Visible = False
Line 11:     End Sub

Source File: C:\Users\Collins\Documents\Visual Studio 2005\WebSites\living to please god world\PhotoAdmin\Default.aspx.vb    Line: 9 

Stack Trace: 

[NullReferenceException: Object reference not set to an instance of an object.]
   PhotoAdmin_Default.Page_Load(Object sender, EventArgs e) in C:\Users\Collins\Documents\Visual Studio 2005\WebSites\living to please god world\PhotoAdmin\Default.aspx.vb:9
   System.Web.UI.Control.OnLoad(EventArgs e) +99
   System.Web.UI.Control.LoadRecursive() +50
   System.Web.UI.Page.Proces开发者_运维百科sRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +627

This is my complete code to upload photos. Can someone help me please?

Imports System.Data
Imports System.IO
Imports System.Data.SqlClient

Partial Class PhotoAdmin_Default
    Inherits System.Web.UI.Page

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        UserIdValue.Text = Membership.GetUser().ProviderUserKey.ToString()
        cannotUploadImageMessage.Visible = False
    End Sub

    Protected Sub dvPictureInsert_ItemInserted(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.DetailsViewInsertedEventArgs) Handles dvPictureInsert.ItemInserted
        'If the record was successfully inserted, save the picture
        If e.AffectedRows > 0 Then
            'Determine the maximum pictureID for this user
            Dim results As DataView = CType(maxPictureIDDataSource.Select(DataSourceSelectArguments.Empty), DataView)
            Dim pictureIDJustAdded As Integer = CType(results(0)(0), Integer)
            'Reference the FileUpload control
            Dim imageUpload As FileUpload = CType(dvPictureInsert.FindControl("imageUpload"), FileUpload)
            If imageUpload.HasFile Then
                Dim baseDirectory As String = Server.MapPath("~/UploadedImages/")
                imageUpload.SaveAs(baseDirectory & pictureIDJustAdded & ".jpg")
            End If
        End If
        If e.Exception Is Nothing Then
            ' Use the AffectedRows property to determine whether the
            ' record was inserted. Sometimes an error might occur that 
            ' does not raise an exception, but prevents the insert
            ' operation from completing.
            If e.AffectedRows = 1 Then
                MessageLabel.Text = "Record inserted successfully."
            Else
                MessageLabel.Text = "An error occurred during the insert operation."
                ' Use the KeepInInsertMode property to remain in insert mode
                ' when an error occurs during the insert operation.
                e.KeepInInsertMode = True
            End If
        Else
            ' Insert the code to handle the exception.
            MessageLabel.Text = e.Exception.Message
            ' Use the ExceptionHandled property to indicate that the 
            ' exception has already been handled.
            e.ExceptionHandled = True
            e.KeepInInsertMode = True
        End If
    End Sub


    Protected Sub dvPictureInsert_ItemInserting(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.DetailsViewInsertEventArgs) Handles dvPictureInsert.ItemInserting
        Dim cancelInsert As Boolean = False

        Dim imageUpload As FileUpload =CType(dvPictureInsert.FindControl("imageUpload"), FileUpload)
        If Not imageUpload.HasFile Then
            cancelInsert = True

            Dim acceptedExtensions = New String() {".jpg", ".png", ".gif"}
            If Not acceptedExtensions.Contains(imageUpload.FileName, StringComparer.OrdinalIgnoreCase) Then
                cancelInsert = True 'Invalid image file! 
            End If

        Else
            Dim image As System.Drawing.Image = System.Drawing.Image.FromStream(imageUpload.PostedFile.InputStream)
            If image.Width > 1300 Or image.Height > 950 Then
                cancelInsert = True
            End If
        End If

        If cancelInsert Then
            e.Cancel = True
            cannotUploadImageMessage.Visible = True
        End If
        'Set the UserId value to the currently logged on user's ID
        e.Values("UserId") = Membership.GetUser().ProviderUserKey
        'Set the UploadedOn value to the current date/time
        e.Values("UploadedOn") = DateTime.Now
    End Sub
    Protected Sub gvPictures_RowDeleted(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewDeletedEventArgs) Handles gvPictures.RowDeleted
        Dim baseDirectory As String = Server.MapPath("~/UploadedImages/")
        Dim fileName As String = baseDirectory & e.Keys("PictureID") & ".jpg"
        File.Delete(fileName)
    End Sub
    Protected Sub gvPictures_RowUpdating(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewUpdateEventArgs) Handles gvPictures.RowUpdating
        e.NewValues("UserId") = Membership.GetUser().ProviderUserKey
    End Sub


End Class


Are you sure Membership.GetUser() is actually returning a user?

You are authenticated and not an anonymous user, correct? You should add a null check or a check to make sure they are authenticated first. I believe you can use User.Identity.IsAuthenticated


Just while editing for formatting I see line 9 has to do with membership and a control. Gut instinct is saying you're not logged in or that control doesn't exist.

Place a breakpoint at your line 9, run the site in debug, and see if the Membership.GetUser() or UserIdValue are null.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜