2013-07-02 36 views
0

我需要從HttpModule中永久或不時地更新ASP.NET頁面。什麼是從HttpModule更新ASP.NET頁面的方法?

這裏是IUpdatablePage接口,爲我們的頁面進行更新的代碼:

interface IUpdatablePage 
    { 
     void Update(string value); 
    } 

這裏是HTTP模塊的代碼,我想,可能是:

void IHttpModule.Init(HttpApplication application) 
    { 
     application.PreRequestHandlerExecute += new EventHandler(application_PreRequestHandlerExecute); 
    } 
    void application_PreRequestHandlerExecute(object sender, EventArgs e) 
    { 
     this._Page = (Page)HttpContext.Current.Handler; 
    } 

    void HttpModuleProcessing() 
    { 
     //... doing smth 

     IUpdatablePage page = this._Page as IUpdatablePage; 
     page.Update(currentVaue); 

     //... continue doing smth 
    } 

這裏我們:

  1. 將當前請求頁保存在_Page,
  2. 在HttpModule中處理時訪問IUpdatablePage接口
  3. 調用Update函數傳遞一些currentValue。

現在頁面獲取Update函數中的值。

public partial class MyPage: System.Web.Page, IUpdatablePage 
    { 
     void IUpdatablePage.Update(string value) 
     { 
      // Here we need to update the page with new value 
      Label1.Text = value; 
     } 
    } 

問題是將這個值傳遞給webform控件的方法是什麼,以便它們能夠立即在瀏覽器中顯示它?

我想刷新頁面的任何方式:使用的UpdatePanel,定時器,IFRAME塊,JavaScript的等

注意,從頁面請求在HTTP模塊正在處理的同時刷新。 請幫我看一下代碼示例(我是網頁初學者)。

+0

的UpdatePanel +定時器聽起來不錯。這種方法有什麼問題? –

+0

我也嘗試過這種組合,但是,令我驚訝的是,它只在http請求完成後更新一次,從來沒有在處理過程中更新。我已準備好通過電子郵件發送完整的項目代碼以獲取詳細信息。 –

+0

沒必要,只需發佈​​一些代碼片段與問題的描述,並有人會幫助。每當計時器打勾時,定時器應該使頁面發回,所以你應該經常更新你的更新。 –

回答

0

在Page和HttpModule之間傳輸數據的方式是使用應用程序命名的靜態對象,它們由會話標識標識。 頁面通過定時器觸發的UpdatePanel進行更新。

HTTP模塊的代碼(簡化):

public class UploadProcessModule : IHttpModule 
{ 
    public void Init(HttpApplication context) 
    { 
     context.BeginRequest += context_BeginRequest; 
    } 
    void context_BeginRequest(object sender, EventArgs e) 
    { 
     HttpContext context = ((HttpApplication)sender).Context; 
     if (context.Request.Cookies["ASP.NET_SessionId"] != null) 
     { 
      string sessionId = context.Request.Cookies["ASP.NET_SessionId"].Value; 
      context.Application["Data_" + sessionId] = new MyClass(); 
     } 
    } 
} 
相關問題