- 締切済み
マスターページでのJavaScrioptファイル
マスターページとコンテンツページ(aspxファイル)のディレクトリ階層が異なる場合、マスターページにJavaScriptファイルの指定を行うと、生成された画面のソースを見ると、マスターページからの相対パスになっており、JavaScriptのメソッドを実行できません。 どうすれば、コンテンツページからのパスで生成されるようにできますか? ■階層 root ┗Script ___Script.js ┗マスターページ ___マスターページ.master ┗コンテンツルート _┗aspxファイル ______コンテンツ.aspx ■マスターページ <head id="Head1" runat="server"> <script type="text/javascript" src="~/Script/Script.js" charset="Shift_JIS"></script> </head> ■生成されたhtml <head id="Head1" runat="server"> <script type="text/javascript" src="../Script/Script.js" charset="Shift_JIS"></script> </head> 希望しているコード <script type="text/javascript" src="../../Script/Script.js" charset="Shift_JIS"></script>
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- うぃず(@Wizard_Zero)
- ベストアンサー率69% (344/495)
ASP.NET 2.0で同じようなページ構造にして試してみましたが、相対パスどころか"~/Script..."がそのままブラウザに送られてきました…。 scriptタグはパス変換の対象になっていない様子。 (このあたりは設定等で変更できるかもしれませんが調べてません。) 解決策としては、マスターページのInitイベントでヘッダにscriptタグを追加する方法があります。 VBの場合: Protected Sub Page_Init(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Init Dim tagScript As New HtmlControls.HtmlGenericControl("script") tagScript.Attributes.Add("type", "text/javascript") tagScript.Attributes.Add("src", Me.ResolveClientUrl("~/Script/Script.js")) tagScript.Attributes.Add("charset", "Shift_JIS") Me.Page.Header.Controls.Add(tagScript) End Sub C#の場合: 私はC#書けないので上記コードからC#用に書き換えてください。
お礼
ありがとうございました。 教えていただいた方法を参考に <script type="text/javascript" src='<%= Me.ResolveClientUrl("~/Script/Script.js") %>' charset="Shift_JIS"></script> で マスターページからのパスではなくコンテンツページからのパスで表示することができました。 C# なので Me ではなく、this にしました。