【问题标题】:HttpModule to Write Out JavaScript Script References to the ResponseHttpModule 写出对响应的 JavaScript 脚本引用
【发布时间】:2010-03-11 16:28:47
【问题描述】:

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

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

【问题讨论】:

    标签: c# asp.net httphandler httpmodule


    【解决方案1】:

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

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

    【讨论】:

    • 当然,除非他是制作第三方模块,当其他人使用时需要自动注入此代码,因此他们不必手动执行。
    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2012-10-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多