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

时间:2012-05-19 16:33:30

标签: 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

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

这是内容页面代码

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

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

我做错了吗?我读了很多页面,说母版页是进行检查的地方。

感谢。 : - )

2 个答案:

答案 0 :(得分: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)”但这不会终止页面执行。它将在当前页面处理结束后重定向。

答案 1 :(得分:3)

这样做是因为Response.Redirect中的第二个参数设置为false - 这意味着您不会结束页面其余部分的执行。

如果您将其设置为true,则页面执行结束(阻止内容页面的Page_Load触发。编辑:以及任何其他后续主页事件物质)

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

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