79

我正在尝试在我的母版页中添加对 jQuery 的脚本引用,以便它适用于任何页面。目前看起来像这样

<script type="text/javascript" src="jquery.js"></script>

问题是路径总是相对于正在执行的 aspx 页面,所以这只有在“jquery.js”文件位于同一文件夹中时才有效。为了使它起作用,我必须将行更改为:

<script type="text/javascript" src="../../jquery.js"></script>

这显然不太理想,因为它仅适用于距根文件夹两层深的页面。如果我尝试以下操作,IIS 会引发有关意外字符的错误。

<script runat="server" type="text/javascript" src="~/jquery.js"></script>

有任何想法吗?

编辑:我也忘了提到脚本必须在 head 标签中

当前的最佳答案在我将其添加到我的母版页时会引发“ ASP.NET Ajax 客户端框架无法加载。 ”错误。它是从 javascript 而不是 .Net 编译器抛出的。如果我将 ScriptManager 移动到应该在的 head 部分,我会收到一个关于 ScriptManager 需要位于表单标记内的编译错误。

第三个答案从编译器抛出“路径中的非法字符。 ”异常

编辑 2:当我将该行添加到我的 head 标签时,我从 IIS 收到此错误。

无法修改 Controls 集合,因为该控件包含代码块(即 <% ... %>)

已解决:我从下面的答案中获取了编辑后的响应并将其放入asp:ContentPlaceHolder元素中

4

10 回答 10

110

您可以使用ScriptManager

<asp:ScriptManager ID="ScriptManager1" runat="server">
    <Scripts>
        <asp:ScriptReference Path="~/jquery.js" />
    </Scripts>
</asp:ScriptManager>

编辑:如果你在你的部分绝对需要这个<head>,你可以这样做:

<head>
    <script type="text/javascript" 
        src="<%= Page.ResolveClientUrl("~/jquery.js") %>"></script>
</head>

编辑2:根据评论,如果您观察到

无法修改 Controls 集合,因为该控件包含代码块(即 <% ... %>)

您可能需要更改以上内容以使用数据绑定语法:

<head>
    <script type="text/javascript" 
        src="<%# Page.ResolveClientUrl("~/jquery.js") %>"></script>
</head>
于 2009-03-30T15:22:49.833 回答
26

尝试<%#而不是<%=在头部分下的母版页中

<script type="text/javascript" 
        src="<%# ResolveUrl("~/YourScriptFolder/YourJQueryOrJavascript.js") %>">
</script>

然后在Page_Load事件下的母版页面的代码后面

Page.Header.DataBind();

现在您可以使用 jQuery 和 JavaScript 以及 CSS,只需更改ResolveUrl要处理 CSS、JavaScript、jQuery 的文件的路径。

于 2012-11-16T10:14:00.390 回答
12

如果你不去我们 asp:ScriptManager 或绝对路径,那么你可以这样做:

<script runat="server" type="text/javascript" 
  src='<%= Page.ResolveUrl("~/jquery.js") %>'></script>
于 2009-03-30T15:26:42.163 回答
3

我不知道你们是否找到了解决问题的方法。我遇到了同样的问题,并且想弄清楚为什么我使用的插件会出现“jQuery is undefined”错误。我尝试了从互联网上获得的所有解决方案,但一点运气都没有。

但是,突然间我的脑海中闪过一些东西,可能是脚本文件应该是有序的。所以,我将 jquery 引用移到了第一个位置,一切都开始像魅力一样工作。

请记住,如果您使用任何带有 jquery 的插件,请确保使用以下设置对这些字段的引用的顺序。

  1. 对 jquery 库的引用
  2. 参考其他后续插件库等等……

例如:

  1. "脚本 src="js/jquery-1.3.2.min.js" 类型="文本/javascript"...
  2. "脚本 src="js/jqDnR.min.js" 类型="文本/javascript"...
  3. "脚本 src="js/jquery.jqpopup.min.js" 类型="文本/javascript"...
  4. "脚本 src="js/jquery.bgiframe.min.js" 类型="文本/javascript"...

始终确保您必须首先放置 jquery 引用,然后是后续库。

希望这可以解决您的问题,尤其是在您使用 MasterPages 时。非常奇怪的是,当您不使用 MasterPages 时,无论您使用什么顺序,它都能正常工作,但当您使用时,它会以某种方式要求正确的顺序。

祝你好运,编码愉快,

文森特·德索萨

于 2009-08-31T12:58:31.750 回答
3
于 2011-08-11T07:23:11.243 回答
1

对于任何页面的文件的绝对路径,请使用以下内容:

<script type="text/javascript" src="<%= Page.ResolveClientUrl("~/jquery.js") %>"></script> 
于 2013-11-11T05:44:04.647 回答
0
<script type="text/javascript" src="/full/path/to/jquery.js"></script>
于 2009-03-30T15:21:37.090 回答
0

如果此脚本标记直接进入浏览器,那么您不太可能在那里替换您网站的根目录。至少不在服务器上。这样你就可以:

  1. 将站点部署到域名的根目录并使用绝对路径(最简单的解决方案)。
  2. 使用服务器控制插入此链接。
  3. 在将生成的 HTML 发送到客户端之前对其进行预处理(使用 HttpResponse.Filter)。
于 2009-03-30T15:24:20.203 回答
0

您还可以使用 <base> HTML 标签:

<base href="http://www.domain.com"></base>  

然后标题部分中的所有链接都相对于基地址:

<script type="text/javascript" src="scripts/jquery.js"></script>

当您有多个发布目标时,它通常很有用,例如本地开发 Web 服务器、演示服务器等。您只需替换该基本 URL。

于 2009-03-30T15:40:06.923 回答
0
<body>
<script language="javascript" src='<%= this.ResolveClientUrl("~/full/path/to/jquery.js") %>' type="text/javascript"></script>
</body>
于 2012-11-12T05:05:21.297 回答