2009-02-01 47 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调用之前还需要做更多的初始化。