【问题标题】:Add a control to the page header in ASP.NET向 ASP.NET 中的页眉添加控件
【发布时间】:2010-10-27 18:48:45
【问题描述】:

我正在 ASP.NET 中创建自定义脚本控件

控件的目的只是标签的服务器变体,用于加载javascript文件 然而,此控件的主要目的是将多个脚本组合成一个响应,以便在客户端他们看到类似 每个位置的标签,因此在 DocumentTop 位置注册的所有脚本将组合成一个标签,但位置“内联”除外,所有内联脚本都在它们存在于标记中的位置单独呈现 我还创建了一个 httphandler js.ashx,它可以实际组合脚本

除了“Head”位置外,一切正常,对于两个文档位置,我只是在预渲染期间使用 ClientScriptManager,但对于 Head 位置,我在预渲染期间尝试了以下代码

var scriptControl = new HtmlGenericControl("script");
scriptControl.Attributes["language"] = "javascript";
scriptControl.Attributes["type"] = "text/javascript";
scriptControl.Attributes["src"] = src;
Page.Header.Controls.Add(scriptControl);

我收到以下错误: 在 DataBind、Init、Load、PreRender 或 Unload 阶段不能修改控件集合。

有谁知道如何在自定义控件中向页眉添加控件?

顺便说一句,该控件用于具有两个嵌套母版并且还在根母版上注册的 ScriptManager 的内容页面。 该项目是一个asp.net 3.5 web应用项目

【问题讨论】:

    标签: c# asp.net custom-controls


    【解决方案1】:

    我找到了我的问题的答案。

    我不太明白为什么,但问题在于当我尝试将脚本控件添加到头部时,在控件的 PreRender 事件中执行此操作会导致我的错误,但如果您在页面的 PreRender 事件期间添加控件一切正常,花花公子 例如:

    protected override void OnInit(EventArgs e)
    {
        base.OnInit(e);
        this.Page.PreRender += new EventHandler(Page_PreRender);
    }
    
    void Page_PreRender(object sender, EventArgs e)
    {
        var scriptControl = new HtmlGenericControl("script");
        Page.Header.Controls.Add(scriptControl);
        scriptControl.Attributes["language"] = "javascript";
        scriptControl.Attributes["type"] = "text/javascript";
        scriptControl.Attributes["src"] = "blah.js";
    }
    

    【讨论】:

      【解决方案2】:

      我不知道你为什么会收到这个错误,但是像这样使用ClientScript 怎么样:

      protected void Page_Load(object sender, EventArgs e)
      {
          string scriptFile = "myscriptFile.js";
      
          if (!this.Page.ClientScript.IsClientScriptIncludeRegistered("myScript"))
          {
              this.Page.ClientScript.RegisterClientScriptInclude("myScript", scriptFile);
          }
      }
      

      ClientScriptManager.RegisterClientScriptInclude Method

      【讨论】:

      • 嗨 Canavar 我成功地使用 Page.ClientScript 在文档正文中注册脚本,据我所知,问题是尝试在 标记中注册脚本标记,this.Page。 ClientScript.RegisterClientScriptInclude 在正文中的
        标记之后注册 js
      【解决方案3】:
      protected override void OnInit(EventArgs e)
      {
          EnsureChildControls();
          base.OnInit(e);
      }
      

      【讨论】:

      • 欢迎来到stackoverflow!最好为示例代码提供简短描述以提高发布准确性:)
      【解决方案4】:
        protected void Page_Load(object sender, EventArgs e)
          {        
              HtmlGenericControl js = new HtmlGenericControl("script");
              js.Attributes["type"] = "text/javascript";
              js.Attributes["src"] = yol.ScriptYol("jquery-1.3.2.min.js");
              this.Page.Header.Controls.Add(js);
      
          }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-12-14
        • 1970-01-01
        • 2014-08-17
        • 2014-01-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多