2011-01-13 47 views
8

如何使用Global.asax的事件PostAuthenticateRequest?我正在關注this tutorial,它提到我必須使用PostAuthenticateRequest事件。當我添加Global.asax事件時,它創建了兩個文件,即標記和代碼隱藏文件。下面是的代碼隱藏文件Global.asax PostAuthenticateRequest事件綁定是如何發生的?

using System; 
using System.Web; 
using System.Web.Security; 
using System.Web.SessionState; 

namespace authentication 
{ 
    public class Global : System.Web.HttpApplication 
    {  
     protected void Application_Start(object sender, EventArgs e) 
     {  
     } 

     protected void Session_Start(object sender, EventArgs e) 
     {  
     } 

     protected void Application_BeginRequest(object sender, EventArgs e) 
     { 
     } 

     protected void Application_AuthenticateRequest(object sender, EventArgs e) 
     {  
     } 

     protected void Application_Error(object sender, EventArgs e) 
     {  
     } 

     protected void Session_End(object sender, EventArgs e) 
     {  
     } 

     protected void Application_End(object sender, EventArgs e) 
     {  
     } 
    } 
} 

內容現在,當我鍵入

protected void Application_OnPostAuthenticateRequest(object sender, EventArgs e) 

它成功調用。現在我想知道如何將PostAuthenticateRequest綁定到這個Application_OnPostAuthenticateRequest方法?我怎樣才能改變方法到其他?

回答

14

魔術......,被稱爲自動事件Wireup機制,你可以寫

Page_Load(object sender, EventArgs e) 
{ 
} 
在您的代碼隱藏和方法

同樣的原因將自動被調用的頁面加載時。

MSDN description for System.Web.Configuration.PagesSection.AutoEventWireup property

獲取或設置指示是否爲ASP.NET頁面事件被自動連接到事件處理函數的值。

AutoEventWireuptrue,處理程序自動綁定到基於他們的名字和簽名在運行時的事件。對於每個事件,ASP.NET將搜索根據模式Page_eventname()命名的方法,例如Page_Load()Page_Init()。 ASP.NET首先查找具有典型事件處理程序簽名的重載(即,它指定ObjectEventArgs參數)。如果沒有找到具有此簽名的事件處理程序,則ASP.NET會查找沒有參數的重載。更多詳情請見this answer

如果你想做到這一點明確你這樣寫,而不是

public override void Init() 
{ 
    this.PostAuthenticateRequest += 
     new EventHandler(MyOnPostAuthenticateRequestHandler); 
    base.Init(); 
} 

private void MyOnPostAuthenticateRequestHandler(object sender, EventArgs e) 
{ 
} 
+0

我浪費了一個小時,因爲它沒有出現在智能感知了,我想我可能要訂閱事件莫名其妙。即將發佈要求如何實施該活動,但後來我想我們試試看,看看我是否有任何錯誤,瞧!它工作:)謝謝各位 – Tux 2011-01-13 08:06:32

相關問題