无法上传照片:NullReferenceException

时间:2011-01-19 20:28:40

标签: asp.net nullreferenceexception

大家好,我几天来一直在努力解决这个错误信息:

以下是错误消息:

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.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +627

这是我上传照片的完整代码。有人能帮帮我吗?

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

2 个答案:

答案 0 :(得分:1)

您确定Membership.GetUser()实际上是在返回用户吗?

您是经过身份验证的,而不是匿名用户,对吗?您应该添加空检查或检查以确保它们首先经过身份验证。我相信你可以使用User.Identity.IsAuthenticated

答案 1 :(得分:0)

在编辑格式时,我看到第9行与成员资格和控件有关。直觉本能说你没有登录或控制不存在。

在第9行放置一个断点,在调试中运行该站点,看看Membership.GetUser()UserIdValue是否为空。