HttpModule写出响应的JavaScript脚本引用

时间:2010-03-11 16:28:47

标签: c# asp.net httphandler httpmodule

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

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

的Page_Load:

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

HTTP模块:

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

2 个答案:

答案 0 :(得分:0)

首先,我很确定这不是放置标签的有效位置。

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

答案 1 :(得分:0)

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

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

如果您需要根据多个键或每个页面中未知的其他因素计算要链接的脚本,请查看this question中的答案#2。