web-dev-qa-db-ja.com

ASP.Netマスターページとファイルパスの問題

マスターページで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>

何か案は?

編集:スクリプトをheadタグに含める必要があることも忘れていました

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

3番目の答えは、コンパイラから「不正な文字がパスにあります。」例外をスローします

編集2:ヘッドタグにその行を追加すると、IISからこのエラーが発生します。

コントロールにコードブロックが含まれているため、Controlsコレクションを変更できません(つまり、<%...%>)

解決しよう:以下の回答から編集した応答を取得し、asp:ContentPlaceHolder要素内に配置しました

77
TheDude

ScriptManager を使用できます。

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

EDIT:あなたが絶対にあなたの<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>
110
Cᴏʀʏ

<%# の代わりに <%=ヘッドセクションの下のマスターページ

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

次に、マスターページのコードビハインドのPage_Loadイベント

Page.Header.DataBind();

これで、CSS、JavaScript、jQueryを処理するResolveUrlのパスを変更するだけで、jQueryとJavaScript、CSSのいずれかを使用できます。

25
Siddiq Baig

Asp:ScriptManagerまたは絶対パスを使用しない場合は、次のように実行できます。

<script runat="server" type="text/javascript" 
  src='<%= Page.ResolveUrl("~/jquery.js") %>'></script>
10
Keltex

あなたが問題の解決策を見つけたかどうかはわかりません。私は同じ問題に直面していたので、使用しているプラ​​グインで「jQuery is undefined」エラーが発生する理由を理解しようと思いました。私はインターネットから得たすべてのソリューションを試しましたが、運はまったくありませんでした。

しかし、突然、スクリプトファイルが整頓されているはずの何かが私の頭に浮かびます。そのため、jqueryの参照を最初の位置に移動すると、すべてが魅力のように機能し始めます。

Jqueryでプラグインを使用している場合は、これらのフィールドへの参照を設定する次の順序を使用してください。

  1. jqueryライブラリへの参照
  2. 他の後続のプラグインライブラリなどへの参照...

例えば。:

  1. 「script src = "js/jquery-1.3.2.min.js" type = "text/javascript" ...
  2. 「script src = "js/jqDnR.min.js" type = "text/javascript" ...
  3. 「script src = "js/jquery.jqpopup.min.js" type = "text/javascript" ...
  4. 「script src = "js/jquery.bgiframe.min.js" type = "text/javascript" ...

Jquery参照を最初に配置し、次にライブラリに配置する必要があることを常に確認してください。

特に、MasterPagesで使用する場合は、これで問題が解決することを願っています。 MasterPagesを使用しない場合、どの順序を使用しても機能することは非常に奇妙ですが、使用する場合は、適切な順序が必要です。

幸運と幸せなコーディング、

ビンセント・ドソウザ

3
Vincent D'Souza

ルート「/」の実行方法 を見てください。これにより、未解決の.jsファイルパスに関するすべての問題が修正されます。基本的にVS Devサーバーを再構成して、通常のlocalhost:port/ではなくlocalhost:port/application name/としてアプリケーションを実行し、名前解決をIISと同じように機能させます。

3
Rahul Sud
<script type="text/javascript" src="/full/path/to/jquery.js"></script>
0
karim79

このスクリプトタグがブラウザに直接送られる場合、サイトのルートをそこで置き換えることはできません。少なくともサーバーにはありません。だからあなたはできる:

  1. サイトをドメイン名のルートに展開し、絶対パスを使用します(最も簡単なソリューション)。
  2. サーバーコントロールでこのリンクを挿入します。
  3. 結果のHTMLをクライアントに送信する前に前処理します(HttpResponse.Filterを使用)。
0
XOR

<base> HTMLタグも使用できます。

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

ヘッダーセクションのすべてのリンクはベースアドレスに関連しています:

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

ローカルdev Webサーバー、デモサーバーなど、複数の公開先がある場合に便利です。ベースURLを置き換えるだけです。

0
Hrvoje Hudo

任意のページのファイルの絶対パスには、次を使用します。

<script type="text/javascript" src="<%= Page.ResolveClientUrl("~/jquery.js") %>"></script> 
0
Umesh Bagalur
<body>
<script language="javascript" src='<%= this.ResolveClientUrl("~/full/path/to/jquery.js") %>' type="text/javascript"></script>
</body>
0
Yusan Susandi