2009-05-20 74 views
5

我创建ASP.NET中一个控件添加到页面页眉在ASP.NET

自定义脚本控制的控制的目的仅仅是标签的服务器变种,用于加载javascript文件 然而,这种控制的主要目的是使在客户端上,他们看到像 标签为每个位置,所以在DocumentTop位置注册的所有脚本都将被合并成的除外单个标签的多个脚本合并为一个响应位置“内联”,在那里他们的标记 我也创建一个HttpHandler,js.ashx,执行实际脚本的结合存在的所有内嵌脚本分别呈现

一切工作正常除“头”的位置,这两个文件的位置,我只是预渲染过程中使用ClientScriptManager但头位置我已经尝试下面的代码在预渲染

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

和我出现以下错误: 控件集合不能期间的DataBind,初始化,加载,在PreRender修改或卸载阶段。

没有人知道一个控件的页头从一个自定义的控制范围之内怎么加?

顺便提及,控制使用具有两个嵌套的主人内容网页上,并且还具有根主注册一个ScriptManager。 该项目是一个asp.net 3.5 Web应用程序项目

回答

8

香港专业教育学院发现了一个答案对我的问题。

我不太明白为什么,但问题在于,当我试图将我的脚本控件添加到头部时,在控件的PreRender事件中执行操作会导致我的错误,但是如果您在Page的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"; 
} 
3

我不知道为什么你得到这个错误,但如何如何使用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

+0

嗨Canavar 我成功地使用Page.ClientScript注册文档主体脚本,这个问题试图进行登记的脚本标签在标记内我的知识,this.Page.ClientScript.RegisterClientScriptInclude注册JS只是身体 – Lightweight 2009-05-20 21:48:26

0
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); 

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

欢迎内

标签计算器后!提供示例代码的简短说明总是更好,以提高发布准确性:) – 2012-10-21 12:55:09

相关问题