2013-08-11 2 views
0

다음 사용자 인증 로그인을 제어하는 ​​데 사용하고 있습니다. 이 사용자가 비활성 또는 잠겨 있지만 데이터베이스에서 사용자가 삭제할 때 잘 리디렉션 할 때 오류 메시지가 나타납니다 ...Asp.net - 개체 참조가 개체의 인스턴스로 설정되지 않았습니다.

"이 개체의 인스턴스에 개체 참조가 설정되지 않았습니다"이 줄에. ..

If currentuser IsNot Nothing And currentuser.IsApproved = False Or currentuser.IsLockedOut = True Then 

어떤 일이 발생할 수 있습니까?

Protected Sub Page_Init(sender As Object, e As System.EventArgs) Handles Me.Init 

    If User.Identity.IsAuthenticated Then 

     Dim currentuser As MembershipUser = Membership.GetUser() 

     If currentuser IsNot Nothing And currentuser.IsApproved = False Or currentuser.IsLockedOut = True Then 
      FormsAuthentication.SignOut() 
      FormsAuthentication.RedirectToLoginPage() 
     End If 

     If currentuser IsNot Nothing Then 
      Response.Redirect("~/media") 
     End If 

    End If 

End Sub 

답변

1

변경 If 조건에 : 당신은 두 번째 부분을 parathesize 및 OrElse/AndAlso를 사용할 필요가

If currentuser IsNot Nothing Then 
    If currentuser.IsApproved = False Or currentuser.IsLockedOut = True Then 
    FormsAuthentication.SignOut() 
    FormsAuthentication.RedirectToLoginPage() 
    End If 

    Response.Redirect("~/media") 
End If 
+0

정말 고마워요! 작품! –

1

, 그렇지 않으면 currentuser IsNot Nothing 그래서 당신 if

의 모든 부분이됩니다 적용되지 않습니다 수정 :

If currentuser IsNot Nothing AndAlso (Not currentuser.IsApproved OrElse currentuser.IsLockedOut) Then 

Or (및 AND)을 사용하지 말고 OrElse (및 AndAlso)을 사용하지 마십시오. 즉, 첫 번째 부분이 이미 true 인 경우 두 번째 부분을 평가하지 않습니다. Or (및 And)은 두 부분을 모두 평가합니다 항상입니다.

+0

조언 해 주셔서 감사합니다. –

1
이후

'그리고'보다 우선 순위를 수신 '또는'표현이 다음과 같이 평가됩니다 : 현재 사용자가 실제로 아무것도에

If 
{ 
    currentuser IsNot Nothing And currentuser.IsApproved = False //condition 1 
    Or 
    currentuser.IsLockedOut = True //condition 2 
} 
Then.. 

경우 조건 1이 실패하지 않습니다,하지만 조건 2 것 던져 코드 이후 예외가 같이 괄호를 추가해야이 문제를 해결하려면 (nothing).somthing.

을 평가하기 위해 노력하고있다 :

If 
    currentuser IsNot Nothing //condition 1 
    And 
    (currentuser.IsApproved = False Or currentuser.IsLockedOut = True) //condition 2 
Then.. 

이제 두 번째 조건은 첫 번째 조건이 true 인 경우에만 평가됩니다.

관련 문제