2011-08-03 60 views
1

我希望能夠全局獲取對當前請求的Page對象的引用,所以我添加了Global.asax文件。Global.asax中的ASP.NET請求頁面

有沒有辦法做到這一點?我認爲這與Application_BeginRequest事件有關。

+0

爲什麼?在你想要做的事情中必須有更好的方法 –

+0

你想用這樣的參考做什麼? – Oded

+0

在任何給定的頁面請求中,我需要一個當前頁面的句柄來存儲在靜態類中。這個類使用頁面引用來做一些服務器端的IO。 – Jesse

回答

3

創建一個類,它是Page一個子類,做什麼你希望並將此子類用作所有頁面的基本類型。

public class MyPage : Page 
{ 
//... override whatever you want, add functionality, whatever 
} 

所有其他網頁:

public class Index : MyPage 
{ 
    // Automatically get new behaviour 
} 
1

您必須使用http模塊來捕獲應用程序中每個頁面的每個請求,並根據請求執行任何您想要的操作。

+0

您可以使用http模塊在請求生命週期的任何階段捕獲請求。 –

1
var page = HttpContext.Current.Handler as Page 
if(page != null) /// do something with page 

的PreRequestHandlerExecute應罰款爲您的需要(如果你不喜歡寫自己的HttpModule,這實際上是很容易的)

+1

當前處理程序在請求生命週期的這一點似乎爲空。 – StriplingWarrior

+0

嘗試PreRequestHandlerExecute,正如MAN建議 –

7

您可以從Global.asax的訪問當前處理器(頁),而不是從任何stage of the request life cycle。即它是不可能的BeginRequest,但它的PreRequestHandlerExecute期間是可能的:

void Application_PreRequestHandlerExecute(object sender, EventArgs e) 
{ 
    var page = (Context.Handler as System.Web.UI.Page); 
} 

注意頁面可能依然爲空,如果處理不是頁面。另外,我不確定你的方法是否正確。也許你應該更詳細地解釋你想要嘗試什麼?

+0

是的,Oded的建議看起來似乎會更好。 – Jesse