6

javascriptファイルを参照するページがいくつかあります。

アプリケーションは仮想ディレクトリ、つまりhttp://localhost/MyVirtualDirectory/MyPage.aspxにローカルに存在します

したがって、ローカルでは次のようにファイルを参照します。

<script src="/MyVirtualDirectory/Scripts/MyScript.js" type="text/javascript"></script>

ただし、本番環境の設定は異なります。このアプリケーションは本番環境では独自のWebサイトとして存在するため、仮想ディレクトリへの参照を含める必要はありません。これに伴う問題は、javascript参照を含むすべてのファイルを変更して、次のようにする必要があることです。

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

ローカルセットアップでこの方法でファイルを参照しようとしましたが、機能しません。

私はこれについて完全に間違っていますか?誰かが私に何をする必要があるか教えてもらえますか?

ありがとう

4

4 に答える 4

18

ResolveUrl("~/") を使用する

<script src="<%=ResolveUrl("~/scripts/myscript.js") %>" type="text/javascript"></script>

~/ は、仮想またはその他のアプリケーションのルートを取得します

于 2010-03-24T16:40:44.027 に答える
4

以前の回答Scriptsでは、ディレクトリが常にアプリケーション ルートのサブディレクトリとして存在すると想定しているようです。その仮定が正しく、ページもルートにある場合、以前のタグは両方とも次のようになります。

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

しかし、あなたの2番目の例を読んだのは、それScripts 常にアプリケーションルートのサブディレクトリであるとは限らないということです(../最初はレベルが上がるためScripts、アプリケーションルートのピアになります)。そうは言っても、2 番目の例はうまくいかなかったと言っていましたね。:-) しかし、それが本当なら、相対パスが一致するようにいずれかの環境を調整し、常に上記の相対パスを使用することを強くお勧めします。

ResolveUrl私が知る限り、使用する唯一の理由は、アプリケーションのページがフォルダー構造にあり、タグがルートのページまたは「サブディレクトリ」のページに表示される可能性がある場合です。ResolveUrlその場合、両方のケースで使用できるため、アンカー ポイントが得られます。私はそのように物事を作成することは決してありません.ページが階層内のどこにあるかを常に確認し(階層が必要な場合)、現在のドキュメントに適切な相対パスを使用します.

于 2010-03-24T16:49:30.857 に答える
0

HttpRuntime.AppDomainAppVirtualPath プロパティを使用してアプリの仮想パス (存在する場合) を取得し、それを使用して JavaScript パスを修正できます ( <script> タグなどで <%= ... %> を使用)。

さらに、その値を公開するグローバル javascript 変数をマスター ページに追加して、実際のアプリ ルートを知る必要があるスクリプトがその方法でアクセスできるようにすることができます。

于 2010-03-24T16:40:45.510 に答える
-1

MVC5 の別の方法:

1) レイアウト html ビュー ファイルで、スクリプトを配置する必要がある場所に RenderSection を配置します。

<html><body>
@RenderSection("scripts1", required: false)
</body></html>

「Scripts1」は好きな名前に変更できることに注意してください。

2) ビューの html ファイルで、"scripts1" を呼び出すだけで、パスと js ファイル名がどこにあるかは関係ありません。

@Scripts1.Render("~/Scripts/MyScript.js")

3) MyScript js ファイルがプロジェクトの Scripts フォルダーにあることを確認します。

それでおしまい。

于 2015-03-04T09:35:05.100 に答える