2012-05-19 218 views
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 

我知道我可以把代码在我的每一个内容的网页,以检查用户是否在/授权记录,但我想从一个位置控制这一切如果可能的话。

我做错了什么?我读过很多页面,说主页面是做检查的地方。

谢谢。 :-)

回答

5
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“,False)”,但这不会终止页面执行。它将在当前页面处理结束后重定向。

+0

工程就像一个魅力。非常感谢你。我将你的答案标记为接受,因为你在2分钟内击败了其他人。 :-) –

3

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

如果你将其设置为true,页面执行结束(防止内容页/秒的Page_Load中烧制而成编辑:以及与此有关的任何其他后续母版页的事件)

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

检查它对你的所有页面做了什么,但是......例如您login.aspx不应具有相同的母版页使用的Response.Redirect(“〜/ login.aspx的”,真)代码上面写的方式......

+0

很好,非常感谢。 顺便说一句,登录具有相同的母版页,但我没有包含上面的代码允许任何人访问它,以及一些其他页面。 尽管感谢您的领导。 –

相关问题