2011-01-19 7 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» одинаковы. См. «[Что такое исключение NullReferenceException в .NET?] (Http://stackoverflow.com/questions/4660142/what-is-a-nullreferenceexception-in-net)» для некоторых советов. –

ответ

1

Вы уверены, что Membership.GetUser() действительно возвращает пользователя?

Вы аутентифицированы, а не анонимный пользователь, правильно? Вы должны добавить нулевую проверку или проверку, чтобы убедиться, что они сначала аутентифицированы. Я считаю, что вы можете использовать User.Identity.IsAuthenticated

+0

yes memebership.GetUser фактически возвращает пользователя. – onfire4JesusCollins

+0

@onfire, а что про ProviderUserKey? – Brandon

+0

Я - волшебник, новичок в asp.net. Я получил это от книги Скотта Митчелла, как создать фотоальбом – onfire4JesusCollins

0

Просто редактируя форматирование, я вижу, что линия 9 связана с членством и элементом управления. Инстинкт кишки говорит, что вы не вошли в систему или этого контроля не существует.

Поместите точку останова на свою линию 9, запустите сайт в отладке и посмотрите, являются ли Membership.GetUser() или UserIdValue равными нулю.

Смежные вопросы