2011-01-19 65 views
0

大家好,我一直挣扎与此错误消息的天:无法上传照片: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 
+0

几乎所有`NullReferenceException`的情况都是一样的。请参阅“[什么是.NET中的NullReferenceException?](http://stackoverflow.com/questions/4660142/what-is-a-nullreferenceexception-in-net)”的一些提示。 – 2014-05-15 19:38:40

回答

1

你确定Membership.GetUser()实际上是返回一个用户吗?

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

+0

是memebership.GetUser实际上是返回一个用户。 – onfire4JesusCollins 2011-01-19 21:01:18

0

就在编辑格式时,我看到第9行必须处理成员资格和控制。直觉本能是说你没有登录或控制不存在。

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