2009-05-20 76 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