2008-09-15 5 views
2

ASP.netのmvcサイトのマスターページで少し作業を開始しました。マスターページのスタイルシートにリンクすると、シートへのパスが正しく更新されているようです。それは私がマスターページのパス

<link href="../../Content/Site.css" rel="stylesheet" type="text/css" /> 

を持っていますが、ページは、私は完璧です

<link href="Content/Site.css" rel="stylesheet" type="text/css" /> 

を取得し、ブラウザに供給されると、ソースコードを見ています。しかし、同じパス変換はスクリプトファイルでは機能しないようです。

<script src="../../Content/menu.js" type="text/javascript"></script> 

と同じものが出てきます。それはまだトップレベルのページで動作するようだが、それは私のエラーを修正するだけのブラウザ/ Webサーバーだと思う。 srcパスもglobbedする方法はありますか?

答えて

3
<script src="<%= ResolveClientUrl("~/Content/menu.js") %>" type="text/javascript"></script> 
+0

恐ろしいResolveClientUrlににrunat =「server」を追加したり、場所をラップする必要があるので、これはウェブで行方不明になっているものを正確に、サーバ側に置き換えられますページの開始時以降 – stimms

+0

これがにある場合は、<%#を使用してデータバインドを呼び出す方がよい場合があります。 <%=あなたが動的にコンテナに追加するのを止めます。何かのWebコントロールが自動的に行います – Keith

0

ではなく、これを使用します。

<link href="~/Content/Site.css" rel="stylesheet" type="text/css" /> 
+0

動作しないことを - 〜/は、あなたが – Keith

1

は、拡張メソッドを作成します。ここに方法はあります:

public static string ResolveUrl(this HtmlHelper helper, string virtualUrl) 
{ 
    HttpContextBase ctx = helper.ViewContext.HttpContext; 
    string result = virtualUrl; 

    if (virtualUrl.StartsWith("~/")) 
    { 
     virtualUrl = virtualUrl.Remove(0, 2); 

     //get the site root 
     string siteRoot = ctx.Request.ApplicationPath; 

     if (!siteRoot.EndsWith("/")) 
      siteRoot += "/"; 

     result = siteRoot + virtualUrl; 
    } 
    return result; 
} 

あなたは、その後のようなスクリプトREFを書き込むことができます。

<script type="text/javascript" src="<%= Html.ResolveUrl("~/Content/menu.js")%>"></script> 
0

か、ページのあなたのHEADセクションにBASEタグを使用することができます。あなたのすべてのリンクは "base"タグに入力された場所に相対的で、 "../../"と "〜"のものを使う必要はありません。 CSSファイル(背景URLなど)のリンクを除いて、リンクはCSSファイルの場所に関連しています。

関連する問題