2010-01-05 70 views
3

我有一個網站,其中包含一系列主頁,這些主頁都來自「基本」母版頁。對於這個例子,我們稱之爲MasterPage.master。ASP.NET 3.5頁面加載 - 設計問題

編輯 -----

基本上有2兩半的網站:公共和私人。我們希望創建一個自定義網站跟蹤工具。任何時候頁面被擊中...我們捕獲一堆有關用戶的數據以供將來報告等。

現在我正在公共網站上工作..但我想重複使用此「實用程序」私人網站從現在起3-4個月。

對我來說,母版頁看起來並不是實現這一目標的最佳方式......儘管我仍然對.NET感興趣,但我覺得母版頁只能用於組織UI。

我已經看到了自定義IHttpModule,並能夠得到一些工作......但它有點貧民窟,如果你問我。

public void Init(HttpApplication context) 
    { 

     context.AcquireRequestState += (new EventHandler(this.context_AquireRequest)); 
    } 
... 
void context_AquireRequest(object sender, EventArgs e) 
    { 

     HttpApplication application = (HttpApplication)sender; 
     HttpContext context = application.Context; 

      if (context.CurrentHandler is Page){ 
       //Do Stuff 
      } 


    } 

末編輯 ----

是否有具有代碼塊中的每一個頁面比下面......如自定義IHttpModule的或以某種方式加載時間運行的一種更好的方式在Global.asax中。

[MasterPage.master] ...

protected void Page_Load(object sender, EventArgs e) 
    { 


     //...do stuff... 

    } 

感謝

回答

1

如果代碼塊始終是相同的話,我會建議

  • 創建一個基類爲您的所有網頁
  • 編寫代碼在該頁面的onload
  • 讓所有的頁從這個基類

這裏繼承是一個代碼示例:

public abstract class PageBase : Page 
{ 
    protected override void OnLoad(EventArgs e) 
    { 
     base.OnLoad(e); 
     // do stuff 
    } 
} 

,所有的頁面會從這個繼承:

public class DisplayOrder : PageBase 
{ 
    // do stuff 
} 

希望,它幫助。

0

當然,我們需要更多的信息,而你沒有張貼任何而是爲頁面加載事件的方法簽名。這是在頁面加載或單擊事件或刷新頁面時觸發的事件。你唯一能做的其他事情就是在你的global.asax文件中添加代碼。

http://msdn.microsoft.com/en-us/library/2027ewzw.aspx

0

否 - 這真是你最好的選擇。如果你把它放在基類中,只要你不覆蓋它,它就會運行所有的子類。

注意,你可以有多個的Page_Load處理程序,所以如果你不想從調用覆蓋的方法基礎的方法來打擾,你可以永遠只是添加第二個處理器,雖然這是一種鈍角設計的。你想要做什麼?

0

有很多地方運行的是每次加載網頁時,預計和完全可以接受的情況下有些底色信息。這就是Load事件。這完全取決於你在特定情況下想要做什麼。請參閱this page以瞭解ASP.Net頁面生命週期的概述,以確保您所做的事遵循了您正在執行的事件的基本原則。