完成我的asp項目後,我想出了一個新的要求。爲此,我必須在所有頁面加載事件中執行一些代碼。我可以爲所有這些頁面加載獲取事件嗎?我無法使用Global.asax的Session_start,因爲它將包含具有會話狀態的WebHandler。有任何想法嗎?是否有任何內置的事件在asp.net中觸發所有的PageLoads?
回答
會話開始不適合,因爲它只會被轟出了新的會話,而不是每次加載頁面。
有幾個選項,包括使用所有頁面繼承的基本頁面。這意味着您需要記住將其鏈接到所有頁面。
我的建議是編寫一個爲所有aspx頁面加載而啓動的http模塊。
您將需要創建一個實現System.Web.IHttpModule的模塊。
using System;
using System.Web;
public class HelloWorldModule : IHttpModule
{
public HelloWorldModule()
{
}
public String ModuleName
{
get { return "HelloWorldModule"; }
}
// In the Init function, register for HttpApplication
// events by adding your handlers.
public void Init(HttpApplication application)
{
application.BeginRequest +=
(new EventHandler(this.Application_BeginRequest));
application.EndRequest +=
(new EventHandler(this.Application_EndRequest));
}
private void Application_BeginRequest(Object source,
EventArgs e)
{
// Create HttpApplication and HttpContext objects to access
// request and response properties.
HttpApplication application = (HttpApplication)source;
HttpContext context = application.Context;
string filePath = context.Request.FilePath;
string fileExtension =
VirtualPathUtility.GetExtension(filePath);
if (fileExtension.Equals(".aspx"))
{
context.Response.Write("<h1><font color=red>" +
"HelloWorldModule: Beginning of Request" +
"</font></h1><hr>");
}
}
public void Dispose() { }
}
然後在web.config鉤它按照這裏的例子。
<httpModules>
<add name="HelloWorldModule" type="HelloWorldModule" />
</httpModules>
您需要檢查context.Request.Path屬性模塊中排除任何請求,其中的路徑我以前不符合條件(即不結束ASPX)。
更多的信息在這裏。 http://www.4guysfromrolla.com/demos/printPage.aspx?path=/articles/011404-1.aspx
不知道如何回答這個問題。它不處理PageLoad事件。它只是在全局asax中處理Application_BeginRequest的等價物。 – Egor4eg 2013-04-22 11:58:51
此外,如果頁面有另一個擴展名(不是「aspx」),它將不起作用。這可能發生在例如路由的情況下。 – Egor4eg 2013-04-22 11:59:49
我的印象是OP只是想在每次頁面被擊中時觸發一些代碼。 OP,如果你能爲我們提供您的使用情況下,一些更多的信息(什麼樣的代碼是你想火每個頁面加載?),那麼我們可以提供更好的答案。 @ Egor4eg - 這是真的,路由/ URL重寫可能會導致問題。您可以通過擴展構成頁面的邏輯(使用balck列表而不是白名單等)或使用基本頁面來解決此問題。再一次,用例會幫助我們更好地回答你的問題。 – CountZero 2013-04-22 12:09:26
您保留一個基頁並從所有aspx頁面繼承它。這樣可以保持邏輯的集中。
例
ASPX頁面
public partial class MyAspxPage : BasePage
{
}
基頁
public class BasePage : Page
{
protected override void OnLoad(EventArgs e)
{
}
}
你也應該離開AutoEventWireup設置爲false。
但我仍想瀏覽所有的網頁!對? – 2013-04-22 11:43:18
將基本頁面中的加載事件和其負載處理程序中的邏輯保持在一起。 Don在aspx頁面的單獨處理程序中執行此操作。 – 2013-04-22 11:45:59
@SubinJacob基頁和HttpHandler的區別是,HttpHandler的將執行的頁面加載邏輯,所有的應用程序頁面,這可能會執行它甚至對於那些不想做到這一點,並在另一方面的BasePage將執行對這些頁面,你想。 – 2013-04-22 11:57:23
我認爲這裏最好的解決方案應該是創建一個自定義的基頁類,它實現PageLoad,然後繼承它的所有頁面。
喜歡的東西:
public abstract class BasePage: Page
{
protected void Page_Load(object sender, EventArgs e) {
// your code
}
}
您可以在web.config中註冊基本頁面類:在給出用戶
<system.web>
<!-- ... -->
<pages pageBaseType="MyWeb.UI.BasePage" />
<!-- ... -->
</system.web>
'MyWeb.UI.PageBase'或'MyWeb.UI.BasePage' – 2013-04-22 12:08:26
'錯誤\t \t 21無法加載類型 'MyWeb.UI.BasePage'。 \t \t ' – 2013-04-22 12:10:50
你有相同的命名空間在我的例子嗎? (「MyWeb.UI」) – Egor4eg 2013-04-22 12:11:45
- 1. 是否有任何事件會在有異常時觸發?
- 2. WPF動畫結束時是否有任何事件觸發?
- 3. AxWindowsMediaPlayer沒有觸發任何事件
- 4. 沒有觸發GridView的OnPageIndexChanging事件ASP.NET
- 5. 是否有在canvas的updateComplete()之前引發的任何事件?
- 6. 在cocos2d中釋放MenuItemImage按鈕後是否有任何事件觸發器?
- 7. 在android中是否有任何事件觸發器,當網絡類型改變
- 8. mediaended事件是否有任何默認的時間間隔被觸發?
- 9. 是否有任何事件基於日曆的可用於ASP.NET
- 10. 我們是否在asp.net中有控件未初始化的任何事件
- 11. 在IE中觸發option.click事件是否有解決方法?
- 12. 在ActiveControl更改時,Delphi中是否有事件觸發?
- 13. ASP.NET DropDownList OnSelectedIndexChanged事件沒有被觸發
- 14. asp.net DropDownList事件沒有觸發
- 15. asp.net Button OnClick事件沒有觸發
- 16. 在radlistview中的Asp.net linkbutton沒有觸發事件
- 17. 需要觸發jqgrid中所有行的選中所有行的事件
- 18. 是否有可能在asp.net中的事務中調用內置的Membership.CreateUser()函數?
- 19. 所有的控件都在asp.net中被觸發
- 20. Silverlight:在呈現之前是否有事件在FrameworkElement上觸發?
- 21. 身份驗證票上是否有任何事件過期? ASP.NET
- 22. 插入html時是否有觸發事件的方法?
- 23. 是否有觸發生成ANDROID_ID的事件?
- 24. 是否有任何包含所有ASP.NET控件(如DataGrid)的pdf文檔?
- 25. 是否有TextWriter子類在寫入文本時觸發事件?
- 26. 如何爲ASP.NET中的所有頁面設置事件動態
- 27. 在UltraGridCell中沒有觸發事件的設置值
- 28. 是否有可能在其他應用程序中觸發觸摸事件?
- 29. 觸發所有監聽事件除了觸發器本身
- 30. 在asp.net Gridview控件中觸發事件的順序是什麼?
也許你可以把代碼放在Master中,但是你的請求太含糊。你也可以繼承相同的頁面。 – 2013-04-22 11:32:41
如上所述,如果您使用的是Master,則Page_Load最適合您。 – 2013-04-22 11:33:31
沒有主頁面。 @ChrisDixon – 2013-04-22 11:33:37