問題は、ponchaが指摘したように、ASP.NET に関する限り、.js ファイルで配信されるコンテンツが文字列であることです。IIS が提供する前に、いかなる種類のレンダリングも適用しません。またはのように、他のコンテンツファイルと同じように扱われます。.jpg
.png
サーバー側メソッド ( など) を呼び出すには、ASP.NET によって解析される任意のページ内で構文ResolveUrl
を使用する必要があります (またはファイルなど)。<% ... %>
.aspx
.master
ところで、これらの小さなコード ブロックはさまざまな名前で呼ばれています。
特に、構文のDisplaying Expression<%= ... %>
が必要です。ここで、
等号の後に入力された値が現在のページに書き込まれます
ResolveClientUrl()
それを知っていれば、 whichを使用して独自の URL を作成できます。
クライアントが Web サーバー上のリソースにアクセスするために使用するのに適した URL 文字列を返します
これに、Web アプリケーションのルート オペレーターまたは~
文字を渡します。ここで、ASP.NET は次のようになります。
~ 演算子を現在のアプリケーションのルートに解決します。
これらを組み合わせることで、次のコードをマスター ページに配置することで、表示式の結果を JavaScript 変数に保存できます ( Joel Varty のブログから引用)。
<script type="text/javascript">
var baseUrl = '<%= Page.ResolveClientUrl("~/") %>';
</script>
JavaScript 変数は本質的にグローバルであるため、他のスクリプトからbaseUrl
変数にアクセスできるようになったため、次のスクリプトで .js ファイルから変数を利用できます。
function ResolveUrl(url) {
return url.replace("~/", baseUrl);
}
これで、JavaScript ファイルから直接呼び出すResolveUrl("~/DynamicMenu.ashx")
ことができ、"~/" を取り除き、サーバー側スクリプトによって以前に作成された baseUrl に置き換えることで、適切な URL が作成されます。
参考文献: