2009-06-05 49 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()清潔劑,因爲用戶清楚地看到,他們是不會再認證。