在内容页面加载之前重定向母版页

Tom*_*ins 3 asp.net events redirect master-pages

我的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
Run Code Online (Sandbox Code Playgroud)

上面的测试工作正常,并且重定向行被执行,但在下面的代码被触发并执行之前不会生效.

这是内容页面代码

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
Run Code Online (Sandbox Code Playgroud)

我意识到我可以在每个内容页面中放置代码来检查用户是否已登录/授权,但我想尽可能从一个位置控制所有内容.

难道我做错了什么?我读了很多页面,说母版页是进行检查的地方.

谢谢.:-)

Kap*_*wal 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
Run Code Online (Sandbox Code Playgroud)

使用Response.Redirect("〜/ login.aspx",True)将终止当前页面处理并重定向到所需页面.

虽然建议使用"Response.Redirect("〜/ login.aspx",False)"但这不会终止页面执行.它将在当前页面处理结束后重定向.