ASP.Netおよびマスターページでの相対ファイルパスの処理
-
08-07-2019 - |
質問
これは非常に単純な質問かもしれませんが、これについてはock笑されますが、マスターページでファイルパスを使用するのは困難です。これは、マスターページを使用するサブディレクトリ内のページの場合、ファイルパスが間違っているためだと思います。
これを修正するには、ルートからファイルパスを取得する必要がありますが、機能していないようです。
試しました:
<script type="text/javascript" src="~/jQueryScripts/jquery.js"></script>
and
<script type="text/javascript" src="../jQueryScripts/jquery.js"></script>
どちらにも運がありません!
ルートからファイルパスを取得するように指示する方法はありますか?ありがとう:)
解決
ファイルパスから推測すると、実際にはurl(またはuri、どちらが不完全なのか忘れている)を意味します。
〜なしで、最初の例は動作するはずです。 <script type="text/javascript" src="/jQueryScripts/jquery.js"></script>
により、ブラウザは http://www.example.com/jQueryScripts/jqueryを要求します。 .js (www.example.comはドメインです)。
他のヒント
AJAX対応サイトを実行している場合は、 VS 2008のネストされたマスターページにJavaScriptへの相対参照を含める推奨方法。
このURLが機能するには、runat=server
の<head>
タグにMasterPage
を含める必要があると思います。
<head runat="server">
最初のチルダは、サーバーコントロールで使用するasp.netのものであり、基本的なHTMLでは機能しません。
詳細な説明に入ることなく、前にスラッシュ(/)を使用し、ルートサイトでない場合はWebアプリ名を含めることができます。
または、スクリプトを動的に含めるためにマスターページにコードを配置し、パスを処理できるようにすることもできます。いいね:
public void AddJavascript(string javascriptUrl)
{
HtmlGenericControl script = new HtmlGenericControl("script");
script.Attributes.Add("type", "text/javascript");
javascriptUrl += "?v" + Assembly.GetExecutingAssembly().GetName().Version;
script.Attributes.Add("src", ResolveUrl(javascriptUrl));
Page.Header.Controls.Add(script);
}
上記のコードは、アセンブリバージョンも追加します。これは主に開発に使用するため、ビルドするたびにJavaScriptファイルが更新されます。
Page.ResolveUrl メソッドを使用してこれを回避できます
例:
<script type="text/javascript" src="<%=Page.ResolveUrl("~/jQueryScripts/jquery.js")%>"></script>