我需要永久地或不时地从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
}
我们在这里:
现在页面获取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正在处理来自页面的请求。 请帮助代码示例(我是网络初学者)。
答案 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();
}
}
}