79

どのページでも機能するように、マスター ページに jQuery へのスクリプト参照を追加しようとしています。現在はこんな感じ

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

問題は、パスが常に実行中の aspx ページに対して相対的であるため、「jquery.js」ファイルが同じフォルダーにある場合にのみ機能することです。それを機能させるには、行を次のように変更する必要があります。

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

これは、ルート フォルダーから 2 レベルの深さのページに対してのみ機能するため、明らかに理想的とは言えません。次のことを試してみると、IIS は予期しない文字に関するエラーをスローします。

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

何か案は?

編集:スクリプトはヘッドタグにある必要があることも忘れていました

現在の上位の回答では、マスター ページに追加すると、「 ASP.NET Ajax クライアント側フレームワークの読み込みに失敗しました。 」というエラーがスローされます。.Net コンパイラではなく、javascript からスローされます。ScriptManager を head セクションに移動すると、フォーム タグ内にある必要がある ScriptManager に関するコンパイル エラーが発生します。

3 番目の回答では、「Illegal characters in path.」例外がコンパイラからスローされます。

編集 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>

EDIT 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();

これで、CSSだけでなくjQueryとJavaScriptのどちらでも使用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
于 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
<body>
<script language="javascript" src='<%= this.ResolveClientUrl("~/full/path/to/jquery.js") %>' type="text/javascript"></script>
</body>
于 2012-11-12T05:05:21.297 に答える