C# 在ASP.NET中将控件添加到页眉

C# 在ASP.NET中将控件添加到页眉,c#,asp.net,custom-controls,C#,Asp.net,Custom Controls,我正在ASP.NET中创建自定义脚本控件 控件的用途只是标记的服务器变体,用于加载javascript文件 但是,此控件的主要目的是将多个脚本组合到一个响应中,以便在客户端看到类似的内容 标记,因此DocumentTop位置中注册的所有脚本都将合并为一个标记(位置“内联”除外),所有内联脚本都会在标记中存在的位置单独呈现 我还创建了一个httphandler,js.ashx,用于实际合并脚本 除了“Head”位置之外,其他一切都正常工作,对于这两个文档位置,我只是在预渲染期间使用ClientSc

我正在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);
我得到以下错误: 在数据绑定、初始化、加载、预渲染或卸载阶段,无法修改控件集合

有人知道如何从自定义控件中向页眉添加控件吗

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

我不知道为什么会出现此错误,但这样使用如何:

protected void Page_Load(object sender, EventArgs e)
{
    string scriptFile = "myscriptFile.js";

    if (!this.Page.ClientScript.IsClientScriptIncludeRegistered("myScript"))
    {
        this.Page.ClientScript.RegisterClientScriptInclude("myScript", scriptFile);
    }
}

我找到了我问题的答案

我不太明白为什么,但问题在于,当我试图将脚本控件添加到头部时,在控件的PreRender事件中执行该操作会导致我的错误,但如果在页面的PreRender事件中添加控件,则一切都会正常进行 例如:


您好,Canavar我正在成功地使用Page.ClientScript在文档正文中注册脚本,问题是尝试在标记中注册脚本标记,据我所知,this.Page.ClientScript.RegisterClientScriptInclude在正文中的标记之后注册js欢迎来到stackoverflow!最好为示例代码提供一个简短的描述,以提高post的准确性:)
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";
}
  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);

    }
protected override void OnInit(EventArgs e)
{
    EnsureChildControls();
    base.OnInit(e);
}