如何将Page.ClientScript.RegisterClientScriptInclude包含在头部?

时间:2009-02-01 02:18:48

标签: asp.net

包含的脚本引用,特别是jQuery,正在viewstate之后呈现。有没有办法在<头>

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

我正在尝试在用户控件的页面加载中注册jquery.js.

提前致谢!

P.S。如果无法完成(使用ClientScript),任何人都知道他们为什么不在其中构建它?

更新

我需要的ClientScript管理器的主要功能是只能包含一次脚本。控件可以在页面上出现多次,但我只想要一个jQuery脚本包括

4 个答案:

答案 0 :(得分:24)

直接将其包含在HEAD中:

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

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

答案 1 :(得分: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 */);
}

答案 2 :(得分: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之前进行更多的初始化。

答案 3 :(得分:1)

似乎无法使用Page.ClientScript将脚本添加到页面标题中。