2

也许有人可以帮助我理解 jQuery 与 ASP.Net 交互的方式?

在我的站点母版页中,我包含了对 jQuery 库的引用以及其他引用,如下所示:

    <script type="text/javascript" src="js/jquery-1.3.2.min.js"></script>    <script src="/js/ui/jquery-ui-1.7.2.custom.min.js" type="text/javascript"></script>    <script  src="/js/jquery.autocomplete.js" type="text/javascript"></script>    <script src="/js/liquidmetal.js" type="text/javascript"></script>    <script src="/js/jquery.flexselect.js" type="text/javascript"></script>

我假设通过这样做,jQuery 库现在对于所有其他使用站点母版作为母版页的 ASP.Net 页面来说将是“全局的”。

在一个特定的子页面中,我使用了其他 jQuery 插件,例如:

为我的数据库应用程序实现搜索功能。

在我的搜索页面中,我包含了一个 $document.ready 函数来实现各种 UI 元素的单击和更改处理程序。然而,这些并没有按预期运行,因此使用 Firebug 尝试了解子页面中出了什么问题,结果发现引发了以下异常:

ReferenceError:未定义 jQuery [中断此错误]

$(文档).ready(函数(){

当我在所有其他对插件等的引用之前包含对 jQuery 库的引用时,我的页面开始按预期运行,Firebug 报告没有问题。

有人可以向我解释一下为什么您需要在我的站点母版和使用它的页面中引用 jQuery 库吗?

我是 jQuery 和 ASP.Net 的相对新手。

母版页代码:

    <!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">
<script type="text/javascript" src="js/jquery-1.3.2.min.js"></script>
<title>Untitled Page</title>
<asp:ContentPlaceHolder ID="HeadContent" runat="server">
</asp:ContentPlaceHolder>
<link rel="stylesheet" href="/css/ui-lightness/jquery-ui-1.7.2.custom.css" type="text/css" />    
<link rel="stylesheet" href="/css/main.css" type="text/css" media="screen, projection" />  
<link rel="stylesheet" href="/css/print.css" type="text/css" media="print" />
<link rel="stylesheet" href="/css/jquery.tooltip.css" type="text/css" />
<link rel="stylesheet" href="/css/menubar.css" type="text/css" media="screen, projection" />
<link rel="stylesheet" href="/css/tipsy.css" type="text/css" media="screen, projection" />
4

4 回答 4

2

应该发生的是,未加载 jquery 的内容页面是与其他内容页面不同的文件夹中的页面,也就是说,您的问题是对包含 jquery 文件的文件夹的引用。为了避免这种问题,可以将 jquery 引用放在网络上的存储库而不是本地文件系统(服务器)中。您应该像这样放置参考:

<head id="Head1" runat="server">
    <title>Some page</title>

    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.0/jquery.min.js" language="javascript" type="text/javascript"></script>
    <script src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.9.2/jquery-ui.min.js" language="javascript" type="text/javascript"></script>
    <link href="~/Scripts/css/smoothness/jquery-ui-1.10.0.custom.min.css" rel="stylesheet"
        type="text/css" runat="server" />

    <asp:ContentPlaceHolder ID="head" runat="server">
    </asp:ContentPlaceHolder>
</head>

请注意引用 jQueryUI 样式表的 runat = "server" 标记。此属性允许 asp.net 处理标记并将相对路径放置到您的样式表,无论您的内容页面是什么级别的嵌套。

于 2013-02-07T16:46:45.897 回答
1

这不应该发生在imo ...

Javascript全部在客户端执行,您的母版页和子页在服务器端组装(不执行Javascript或任何东西),只有当您查看页面时,服务器才会将所有主/子部分放在一起并将完成的HTML发送到浏览器,只有这样浏览器才会开始执行 Javascript。所以它绝对不应该放在子页面和母版页面中......

从没有任何额外信息的错误来看,我唯一能想到的是您可能将 Jquery 不是放在头部而是放在母版页的底部(因此,当从上到下读取 HTML 时,浏览器首先会遇到调用没有加载脚本的jQuery(在子页面代码中),因为那是最后的waaaay。)

当将代码也放在您的子页面中时,它在您的 HTML 中足够高,以便在调用 JQuery 时可用......

于 2013-02-07T10:53:07.103 回答
0

确保您在母版页中的内容占位符之前引用了 jquery 库。

<script type="text/javascript" src="http://code.jquery.com/jquery-1.9.0.js"></script>

<asp:ContentPlaceHolder ID="head" runat="server">

</asp:ContentPlaceHolder>
于 2013-02-07T10:49:46.640 回答
0

Vicente 是正确的,使用波浪号前缀表示路径是相对于路由的

但如果它仍然给出错误,请使用 google cdn 方法与您的本地副本作为备份,例如:

<script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>
<script type="text/javascript">
if (typeof jQuery == 'undefined')
{
    document.write(unescape("%3Cscript src='~/js/jquery-1.3.2.min.js' type='text/javascript'%3E%3C/script%3E"));
   }
  </script>
于 2013-02-07T19:12:11.453 回答