包含的脚本引用,特别是jQuery,正在viewstate之后呈现。有没有办法在<头>
Page.ClientScript.RegisterClientScriptInclude("jQuery", "/scripts/jquery.js");
我正在尝试在用户控件的页面加载中注册jquery.js.
提前致谢!
P.S。如果无法完成(使用ClientScript),任何人都知道他们为什么不在其中构建它?
更新
我需要的ClientScript管理器的主要功能是只能包含一次脚本。控件可以在页面上出现多次,但我只想要一个jQuery脚本包括
答案 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将脚本添加到页面标题中。