1. ホーム
  2. asp.net

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

2023-07-22 23:11:53

質問

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

何かアイデアはありますか?

EDITです。 スクリプトは必ずheadタグ内に記述しなければならないことを書き忘れました。

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

3番目の回答は、"を投げます。 パスに不正な文字があります。 コンパイラから例外が発生します。

EDIT 2: この行をheadタグに追加すると、IISからこのエラーが表示されます。

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

SOLVEDです。 以下の回答から編集された回答を取り出して、それを asp:ContentPlaceHolderの中に置きました。 要素の中に入れました。

どのように解決するのですか?

あなたは 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>