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 が定義されていません [このエラーで中断]

$(document).ready(function (){

プラグインなどへの他のすべての参照の前に 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 参照をローカル ファイル システム (サーバー) ではなく、Web 上にあるリポジトリに配置します。次のように参照を配置する必要があります。

<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

これはあってはならないことです...

Javascript はすべてクライアント側で実行され、マスターページと子ページはサーバー側でアセンブルされ (Javascript は実行されません)、ページを表示するときにのみ、サーバーはすべてのマスター/子の部分をまとめて、完成した HTML をブラウザーに送信します。そうして初めて、ブラウザは Javascript の実行を開始します。したがって、子ページとマスターページの両方に配置しないでください...

追加情報なしでエラーから判断すると、私が考えることができる唯一のことは、Jquery を頭ではなくマスターページの下部に配置した可能性があるということです (したがって、HTML を上から下に読み取るときに、ブラウザーは最初に呼び出しに遭遇しますスクリプトがロードされていない jQuery (子ページ コード内)。

子ページにもコードを配置すると、JQuery の呼び出しが行われたときに使用できるように、HTML で十分に高くなります...

于 2013-02-07T10:53:07.103 に答える
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 に答える
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 に答える