我的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
我意识到我可以在每个内容页面中放置代码以检查用户是否已登录/授权,但我想在可能的情况下从一个位置控制所有内容。
我做错了吗?我读了很多页面,说母版页是进行检查的地方。
感谢。 : - )
答案 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
页面不应该与上面代码编写方式相同的母版页...