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

我意识到我可以在我的每个内容页面中放置代码来检查用户是否登录/授权,但如果可能的话,我想从一个位置控制它。

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

谢谢。:-)

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 中的第二个参数设置为false- 这意味着您不会结束页面其余部分的执行。

如果将其设置为true,则页面执行结束(防止内容页面的 Page_Load 触发。编辑:以及与此相关的任何其他后续母版页事件)

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

检查它对您所有页面的作用......例如,您的login.aspx页面不应具有与上面编写代码的方式相同的母版页......

于 2012-05-19T17:02:13.623 回答