2009-02-01 49 views
17

包含的腳本引用,特別是jQuery,正在呈現在viewstate之後。有沒有辦法在<的頭部>?如何讓Page.ClientScript.RegisterClientScriptInclude包含在頭部?

Page.ClientScript.RegisterClientScriptInclude("jQuery", "/scripts/jquery.js"); 

我想在用戶控件的頁面加載中註冊jquery.js。

提前致謝!

P.S.如果無法完成(使用ClientScript),任何人都有一個想法,爲什麼他們不建立它?

UPDATE

的ClientScript經理,我需要的主要特點是隻包含一個腳本一次的能力。該控件可以在頁面上多次出現,但我只想要一個jQuery腳本包含

回答

22

直接inlcude它在頭部:

HtmlGenericControl Include = new HtmlGenericControl("script"); 
Include.Attributes.Add("type", "text/javascript"); 
Include.Attributes.Add("src", sInclude); 
this.Page.Header.Controls.Add(Include); 

在添加它之前,您需要檢查以確保它不存在。

8

我曾經遇到過這個問題,並且最終沒有使用RegisterClientScriptInclude。

我在頁面的標題中放置了一個佔位符,並通過HtmlGenericControl將腳本標記添加到了佔位符。

我會看看我能否找到我的代碼,然後用它編輯我的答案。

編輯

我無法找到我的代碼,所以我只是重新創建它:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="WebApplication1._Default" %> 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 

<html xmlns="http://www.w3.org/1999/xhtml" > 
<head runat="server"> 
    <asp:PlaceHolder runat="server" ID="HeadPlaceHolder"></asp:PlaceHolder> 
</head>  
<body> 
    ... 
</body> 
</html> 

而後面的代碼:

protected void Page_Load(object sender, EventArgs e) 
{ 
    HeadPlaceHolder.Controls.Add(/* Your control here */); 
} 
+0

謝謝!是的,我讀到的所有內容都表明它不會成爲頭腦。 – ccook 2009-02-01 02:29:40

+0

這非常完美 - 佔位符對於準確定位腳本在頭部的位置非常有用,主要是爲了整潔。我還使用了一個單獨的樣式表。 Page.Header.Controls.Add方法只附加到最後,所以一切都趨向於混合。使用PlaceHolder,腳本被分組;樣式表被分組。 – goodeye 2011-07-06 22:04:04

1

似乎無法使用Page.ClientScript將腳本添加到頁面的標題中。

3

嘿,老問題,但也許這仍然是一個人的興趣。

我正在用.net 3.5sp1創建一個自己的UserControl,遇到了同樣的問題。以下解決方案適用於我。

這段代碼是從UserControl類:

protected void Page_Init(object sender, EventArgs e) 
{ 
    const string scriptKey = "UserControlScript"; 

    if(!Page.ClientScript.IsClientScriptIncludeRegistered(Page.GetType(), scriptKey)) 
    { 
     Page.ClientScript.RegisterClientScriptInclude(Page.GetType(), scriptKey, ResolveClientUrl("~/js/UserControl.js")); 
    } 
} 

我用Page_Init,因爲我需要做一些具有嵌套頁的Page_Load調用之前還需要做更多的初始化。