2009-06-04 9 views
6

私はデフォルトのASP.net MVCプロジェクトを作成しました。マスターページでは、私はトップasp.net MVCにjsファイルを含める方法とすべてのルートで有効なパスを持っている

<head runat="server"> 
    <title><asp:ContentPlaceHolder ID="TitleContent" runat="server" /></title> 
    <link href="../../Content/Site.css" rel="stylesheet" type="text/css" /> 
</head> 

で次のように持っている私は、JavaScriptのファイルを追加する必要がありますし、ページにソリューションエクスプローラからファイルをドラッグすることで、次のように行を追加しました:

<head runat="server"> 
    <title><asp:ContentPlaceHolder ID="TitleContent" runat="server" /></title> 
    <link href="../../Content/Site.css" rel="stylesheet" type="text/css" /> 
    <script src="../../Scripts/jquery-1.3.2.min.js" type="text/javascript"></script> 
</head> 

私は、サイトにアクセスし、私はこれを見ブラウザからHTMLを見て:

<head><title> 

    Index 

</title><link href="Content/Site.css" rel="stylesheet" type="text/css" /> 
    <script src="../../Scripts/jquery-1.3.2.min.js" type="text/javascript"></script> 
</head> 

相対パスが固定されたCSSファイルが、JSファイルではありません。サイトは、開発ボックスにあるルートとは別のサーバー上のフォルダに展開されます。

これを行う適切な方法はありますか?

答えて

16

のURLヘルパーを使用します。

<script type="text/javascript" src="<%=Url.Content("~/Content/script/MyFile.js")%>"></script> 

希望

+0

これは、〜がサイトのルートへのパスに置き換えられるため、サイトをサブディレクトリにインストールする際の問題を修正します。 しかし、ルートに到達すると、jsファイルはルートの下のScriptsフォルダにあり、../../Scriptsは残っていないという問題があります。 MVCは異なるサブフォルダにルーティングするので、スクリプトはすべてのルートから常に利用可能ではありません。 少なくとも私はルートとの相対パスをハードコードする方法があるので、私はあなたに+1を与えました。しかし、誰かがJSのためではなく、箱の中でCSSのためになぜ機能するのかを説明できるかどうかを待つつもりです。 – jvanderh

+0

私は問題がCSS対Javaスクリプトではないと思うが、あなたのcssはあなたのconetneフォルダの中にあり、あなたのスクリプトではないと思う。 – Lewis

7

を助けているあなたは、このような何かをするヘルパーメソッドを作成することができます

<%= Helper.IncludeJavascriptFile("Menu.js") %> 

をし、そのヘルパーにあなたが何かをしますlike:

public string IncludeJavascriptFile(string fileName){ 
    return Url.Content("<root>/Javascript/Files/" + fileName); 
} 

次に、ビューからそのヘルパーメソッドを呼び出すことができます。あなたがファイルの場所を変更することに決めた場合、それはあなたがそれを心配する必要がある1つの場所にしかありません。あなたがファイルの名前を変更すると、それはそれ自体の別の問題です。

+1

+1 mantainability。 – jvanderh

関連する問題