2009-06-05 46 views
0

目前,我有一些代码如下:需要帮助理解控制流程与事件处理程序

protected override void OnLoad(EventArgs e) 
{ 
    if(IsAuthorized(param1, param2, ...)) 
    { 
     //snip 
    } 
    else 
    { 
     Response.Write("Not authorized"); 
    } 
} 

protected void MyButton1_Click(object sender, EventArgs e) 
{ 
    //snip 
} 

protected void MyButton2_Click(object sender, EventArgs e) 
{ 
    //snip 
} 

当用户登录时,他们可以去的网页和运行的OnLoad。现在,如果他们的会话在页面仍然打开的情况下过期,那么尝试点击MyButton1,他们会被“未经授权”迎接,但MyButton1_Click中的代码仍然会运行。任何人都可以向我指出我将如何正确处理这种情况?我认为我可以抛出新的SecurityException(),然后在catch中显示我想要的任何错误(SecurityException),但事件处理程序仍然运行。提前致谢。

+0

就我所见,事件处理程序应该完美运行? 你的代码中没有任何东西可以停止按钮中的事件处理程序来停止调用事件..请纠正我,如果我的错误:) – Moulde 2009-06-05 22:39:33

+0

问题是什么是停止控制流后的最佳方法!IsAuthenticated in OnLoad 。正如标记的答案中指出的那样,我太过于复杂。 – 2009-06-06 00:54:55

回答

1

你可以扔在你的代码认证检查如MSDN验证码:

private void Page_Load(object sender, EventArgs e) 
{ 
    // Check whether the current request has been 
    // authenticated. If it has not, redirect the 
    // user to the Login.aspx page. 
    if (!Request.IsAuthenticated) 
    { 
     Response.Redirect("Login.aspx", true); 
    } 
} 

我相信这是比Response.Write()清洁剂,因为用户清楚地看到,他们是不会再认证。