3

ASP.NETマスターのPage_Initイベントページに、ユーザーがコンテンツページへのアクセスを許可されているかどうかを確認し、許可されていない場合はログインページにリダイレクトするコードがあります。このコードは、チェック自体に関しては正常に機能します。ただし、上記のリダイレクト後もコンテンツのPage_Loadイベントが発生することを発見しました。これにより、ユーザーがログインしていて特定の変数が設定されていると想定しているページで問題が発生しています。

これはマスターページコードです(簡略化)

    Protected Sub Page_Init(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Init
...
            If Access_Level > User_Level_ID Then
                Response.Redirect("~/login.aspx", False)
            End If

    End Sub

上記のテストは正常に機能し、リダイレクト行が実行されますが、以下のコードが実行されて実行されるまでは有効になりません。

これはコンテンツページコードです

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    Dim Rec_IDs As New List(Of String)
    Rec_IDs = Session("Rec_IDs")
    lblCount.Text = String.Format("You have {0} records in your cart", CType(Rec_IDs.Count, String)) 'this gives an error if Session("Rec_IDs") is null
End Sub

各コンテンツページにコードを入れて、ユーザーがログイン/承認されているかどうかを確認できることはわかっていますが、可能であれば、すべてを1か所から制御したいと思いました。

私は何か間違ったことをしていますか?マスターページがチェックを行う場所であると言っているページをたくさん読みました。

ありがとう。:-)

4

2 に答える 2

6
    Protected Sub Page_Init(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Init
...
            If Access_Level > User_Level_ID Then
                Response.Redirect("~/login.aspx", True)
            End If

    End Sub

Response.Redirect( "〜/ login.aspx"、True)を使用すると、現在のページ処理が終了し、目的のページにリダイレクトされます。

「Response.Redirect( "〜/ login.aspx"、False)」を使用することをお勧めしますが、これによってページの実行が終了することはありません。現在のページ処理が終了した後にリダイレクトされます。

于 2012-05-19T17:04:43.660 に答える
3

これは、Response.Redirect の 2 番目の引数がfalse- に設定されているためです。これは、ページの残りの実行を終了していないことを意味します。

に設定するとtrue、ページの実行が終了します (コンテンツ ページの Page_Load が発生するのを防ぎます。EDIT : およびその件に関するその他の後続のマスター ページ イベント)

Response.Redirect("~/login.aspx", True)

ただし、すべてのページに対して何を行うかを確認してください....たとえば、コードが上記で記述されているように、ページに同じマスターページがあってはlogin.aspxなりません...

于 2012-05-19T17:02:13.623 に答える