2010-03-11 24 views
1

在Page_Load事件的我的页面上,我将一组字符串添加到Context对象。我有一个HttpModule将启动EndRequest并检索字符串的集合。然后我做的是写出一个脚本引用标记(基于字符串集合)给响应。问题是页面读取脚本引用,但不检索文件的内容(我想象,因为这发生在EndRequest事件中)。我无法触发BeginRequest事件,因为我无法访问Context Items集合。HttpModule将JavaScript脚本引用写入响应

我试着还注册了一个处理脚本引用请求的HttpHandler,但是我无法从那里访问Context.Items中的字符串集合。有什么建议么?

的Page_Load:

protected void Page_Load(object sender, EventArgs e) 
    { 
     Context.Items.Add("ScriptFile", "/UserControls.js"); 
    } 

的HttpModule:

public void OnEndRequest(Object s, EventArgs e) 
    { 
     HttpApplication app = s as HttpApplication; 
     object script = app.Context.Items["ScriptFile"]; 
     app.Response.Write("<script type='text/javascript' src='" + script + "'></script>"); 
    } 

回答

0

首先,我敢肯定这是不是把标签有效的地方。

二,你为什么要重新发明轮子?您已经拥有ScriptManager以及将脚本代码注入ASP.NET输出的完善方法。为什么在EndRequest期间需要这样做?这应该可以在页面级别进行处理。

+0

当然,除非他是制作第三方模块,当其他人使用时需要自动注入此代码,因此他们不必手动执行此操作。 – 2016-04-27 16:48:02

0

如果每个参考指向一个特定的脚本,我会使用每个页面的Page_Load中的ClientScriptManager

if(!ClientScript.IsClientScriptIncludeRegistered("ScriptFile")) 
{ 
    ClientScript.RegisterClientScriptInclude("ScriptFile", "/UserControls.js"); 
} 

如果你需要计算脚本基于多个键或在每一页没有已知的一些其他因素联系起来的,然后在this question检查出答案#2。