有什么方法可以从HttpModule更新ASP.NET页面?

时间:2013-07-02 07:16:30

标签: asp.net

我需要永久地或不时地从HttpModule更新ASP.NET页面。

以下是我们要更新的页面的IUpdatablePage接口的代码:

    interface IUpdatablePage
    {
       void Update( string value );
    }

以下是HttpModule的代码,我想,可以是:

    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
  3. 中处理时访问IUpdatablePage接口
  4. 调用Update函数传递一些currentValue。
  5. 现在页面获取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,Timer,iframe块,javascript等。

    注意,在刷新时,HttpModule正在处理来自页面的请求。 请帮助代码示例(我是网络初学者)。

1 个答案:

答案 0 :(得分:0)

在Page和HttpModule之间传输数据的方法是使用由会话ID标识的Application命名静态对象。 该页面由计时器触发的UpdatePanel更新。

HttpModule的代码(简化):

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();
      }
   }
}